@hello.nrfcloud.com/proto-map 5.6.3 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +0 -16
  2. package/dist/generator/generateModels.js +0 -85
  3. package/dist/generator/models.js +1 -83
  4. package/dist/markdown/getCodeBlock.js +0 -26
  5. package/dist/models/check-model-rules.js +1 -91
  6. package/dist/models/models.js +5 -114
  7. package/dist/models/types.js +0 -12
  8. package/models/README.md +0 -4
  9. package/models/check-model-rules.ts +1 -90
  10. package/models/models.ts +1 -8
  11. package/models/types.ts +0 -16
  12. package/package.json +2 -3
  13. package/dist/generator/isDir.js +0 -163
  14. package/dist/generator/isDir.spec.js +0 -212
  15. package/dist/markdown/getFrontMatter.js +0 -15
  16. package/dist/models/asset_tracker_v2+AWS/examples/examples.spec.js +0 -489
  17. package/models/PCA20035+solar/README.md +0 -10
  18. package/models/PCA20035+solar/transforms/airQuality.md +0 -48
  19. package/models/PCA20035+solar/transforms/battery.md +0 -46
  20. package/models/PCA20035+solar/transforms/button.md +0 -45
  21. package/models/PCA20035+solar/transforms/deviceInfo.md +0 -72
  22. package/models/PCA20035+solar/transforms/gain.md +0 -45
  23. package/models/PCA20035+solar/transforms/geolocationFromGroundfix.md +0 -67
  24. package/models/PCA20035+solar/transforms/geolocationFromMessage.md +0 -80
  25. package/models/PCA20035+solar/transforms/humidity.md +0 -43
  26. package/models/PCA20035+solar/transforms/networkInfo.md +0 -84
  27. package/models/PCA20035+solar/transforms/pressure.md +0 -43
  28. package/models/PCA20035+solar/transforms/temperature.md +0 -43
  29. package/models/asset_tracker_v2+AWS/README.md +0 -6
  30. package/models/asset_tracker_v2+AWS/examples/examples.spec.ts +0 -229
  31. package/models/asset_tracker_v2+AWS/examples/shadow/example-1.json +0 -24
  32. package/models/asset_tracker_v2+AWS/examples/shadow/example-2.json +0 -30
  33. package/models/asset_tracker_v2+AWS/examples/shadow/example-3.json +0 -37
  34. package/models/asset_tracker_v2+AWS/examples/shadow/example-4.json +0 -48
  35. package/models/asset_tracker_v2+AWS/examples/shadow/example-5.json +0 -43
  36. package/models/asset_tracker_v2+AWS/transforms/GNSS.md +0 -66
  37. package/models/asset_tracker_v2+AWS/transforms/battery-voltage.md +0 -50
  38. package/models/asset_tracker_v2+AWS/transforms/device-info.md +0 -61
  39. package/models/asset_tracker_v2+AWS/transforms/env.md +0 -69
  40. package/models/asset_tracker_v2+AWS/transforms/fuel-gauge.md +0 -62
  41. package/models/asset_tracker_v2+AWS/transforms/roam.md +0 -100
  42. package/models/asset_tracker_v2+AWS/transforms/solar.md +0 -58
@@ -1,72 +0,0 @@
1
- ---
2
- type: messages
3
- ---
4
-
5
- # Device info
6
-
7
- ## Match Expression
8
-
9
- ```jsonata
10
- appId = 'DEVICE' and $exists(data.deviceInfo)
11
- ```
12
-
13
- ## Transform Expression
14
-
15
- ```jsonata
16
- [
17
- {"bn": "14204/0/", "n": "0", "vs": data.deviceInfo.imei, "bt": ts },
18
- {"n": "1", "vs": data.deviceInfo.iccid },
19
- {"n": "2", "vs": data.deviceInfo.modemFirmware },
20
- {"n": "3", "vs": data.deviceInfo.appVersion },
21
- {"n": "4", "vs": data.deviceInfo.board },
22
- {"n": "5", "vs": data.deviceInfo.bat }
23
- ]
24
- ```
25
-
26
- ## Input Example
27
-
28
- ```json
29
- {
30
- "appId": "DEVICE",
31
- "messageType": "DATA",
32
- "ts": 1676369307189,
33
- "data": {
34
- "deviceInfo": {
35
- "imei": "350457794611739",
36
- "iccid": "8931080620054223678",
37
- "modemFirmware": "mfw_nrf9160_1.3.3",
38
- "board": "thingy91_nrf9160",
39
- "appVersion": "0.0.0-development"
40
- }
41
- }
42
- }
43
- ```
44
-
45
- ## Result Example
46
-
47
- ```json
48
- [
49
- {
50
- "bn": "14204/0/",
51
- "n": "0",
52
- "vs": "350457794611739",
53
- "bt": 1676369307189
54
- },
55
- {
56
- "n": "1",
57
- "vs": "8931080620054223678"
58
- },
59
- {
60
- "n": "2",
61
- "vs": "mfw_nrf9160_1.3.3"
62
- },
63
- {
64
- "n": "3",
65
- "vs": "0.0.0-development"
66
- },
67
- {
68
- "n": "4",
69
- "vs": "thingy91_nrf9160"
70
- }
71
- ]
72
- ```
@@ -1,45 +0,0 @@
1
- ---
2
- type: messages
3
- ---
4
-
5
- # Solar Charge gain
6
-
7
- The gain measured from the solar shield.
8
-
9
- ## Match Expression
10
-
11
- ```jsonata
12
- appId = 'SOLAR'
13
- ```
14
-
15
- ## Transform Expression
16
-
17
- ```jsonata
18
- [
19
- {"bn": "14210/0/", "n": "0", "v": $number(data), "bt": ts }
20
- ]
21
- ```
22
-
23
- ## Input Example
24
-
25
- ```json
26
- {
27
- "appId": "SOLAR",
28
- "messageType": "DATA",
29
- "ts": 1681985624779,
30
- "data": "3.123456"
31
- }
32
- ```
33
-
34
- ## Result Example
35
-
36
- ```json
37
- [
38
- {
39
- "bn": "14210/0/",
40
- "n": "0",
41
- "v": 3.123456,
42
- "bt": 1681985624779
43
- }
44
- ]
45
- ```
@@ -1,67 +0,0 @@
1
- ---
2
- type: messages
3
- ---
4
-
5
- # Geo Location from ground fix
6
-
7
- Uses the ground fix response from nRF Cloud location services for a device geo
8
- location.
9
-
10
- The geo location is written to instance `1` of the object `14201`.
11
-
12
- ## Match Expression
13
-
14
- ```jsonata
15
- appId = 'GROUND_FIX' and $exists(data.lat) and $exists(data.lon) and $exists(data.uncertainty) and $exists(data.fulfilledWith)
16
- ```
17
-
18
- ## Transform Expression
19
-
20
- ```jsonata
21
- [
22
- {"bn": "14201/1/", "n": "0", "v": data.lat, "bt": $millis() },
23
- {"n": "1", "v": data.lon },
24
- {"n": "3", "v": data.uncertainty },
25
- {"n": "6", "vs": data.fulfilledWith }
26
- ]
27
- ```
28
-
29
- ## Input Example
30
-
31
- ```json
32
- {
33
- "appId": "GROUND_FIX",
34
- "messageType": "DATA",
35
- "data": {
36
- "lat": 59.3381238,
37
- "lon": 18.00908089,
38
- "uncertainty": 883.66,
39
- "fulfilledWith": "MCELL"
40
- }
41
- }
42
- ```
43
-
44
- ## Result Example
45
-
46
- ```json
47
- [
48
- {
49
- "bn": "14201/1/",
50
- "n": "0",
51
- "v": 59.3381238,
52
- "bt": 1699999999999
53
- },
54
- {
55
- "n": "1",
56
- "v": 18.00908089
57
- },
58
- {
59
- "n": "3",
60
- "v": 883.66
61
- },
62
- {
63
- "n": "6",
64
- "vs": "MCELL"
65
- }
66
- ]
67
- ```
@@ -1,80 +0,0 @@
1
- ---
2
- type: messages
3
- ---
4
-
5
- # Geo Location from a device message
6
-
7
- ## Match Expression
8
-
9
- ```jsonata
10
- appId = 'GNSS'
11
- ```
12
-
13
- ## Transform Expression
14
-
15
- ```jsonata
16
- [
17
- {"bn": "14201/0/", "n": "0", "v": data.lat, "bt": ts },
18
- {"n": "1", "v": data.lng },
19
- {"n": "2", "v": data.alt },
20
- {"n": "3", "v": data.acc },
21
- {"n": "4", "v": data.spd },
22
- {"n": "5", "v": data.hdg },
23
- {"n": "6", "vs": "GNSS" }
24
- ]
25
- ```
26
-
27
- ## Input Example
28
-
29
- ```json
30
- {
31
- "appId": "GNSS",
32
- "messageType": "DATA",
33
- "ts": 1690820492999,
34
- "data": {
35
- "lng": 10.437692463102255,
36
- "lat": 63.43308707524497,
37
- "acc": 4.703136444091797,
38
- "alt": 138.33331298828125,
39
- "spd": 0.02938256226480007,
40
- "hdg": 185.11207580566406
41
- }
42
- }
43
- ```
44
-
45
- ## Result Example
46
-
47
- ```json
48
- [
49
- {
50
- "bn": "14201/0/",
51
- "n": "0",
52
- "v": 63.43308707524497,
53
- "bt": 1690820492999
54
- },
55
- {
56
- "n": "1",
57
- "v": 10.437692463102255
58
- },
59
- {
60
- "n": "2",
61
- "v": 138.33331298828125
62
- },
63
- {
64
- "n": "3",
65
- "v": 4.703136444091797
66
- },
67
- {
68
- "n": "4",
69
- "v": 0.02938256226480007
70
- },
71
- {
72
- "n": "5",
73
- "v": 185.11207580566406
74
- },
75
- {
76
- "n": "6",
77
- "vs": "GNSS"
78
- }
79
- ]
80
- ```
@@ -1,43 +0,0 @@
1
- ---
2
- type: messages
3
- ---
4
-
5
- # Environment sensor: humidity
6
-
7
- ## Match Expression
8
-
9
- ```jsonata
10
- appId = 'HUMID'
11
- ```
12
-
13
- ## Transform Expression
14
-
15
- ```jsonata
16
- [
17
- {"bn": "14205/0/", "n": "1", "v": $number(data), "bt": ts }
18
- ]
19
- ```
20
-
21
- ## Input Example
22
-
23
- ```json
24
- {
25
- "appId": "HUMID",
26
- "messageType": "DATA",
27
- "ts": 1681985384511,
28
- "data": "23.16"
29
- }
30
- ```
31
-
32
- ## Result Example
33
-
34
- ```json
35
- [
36
- {
37
- "bn": "14205/0/",
38
- "n": "1",
39
- "v": 23.16,
40
- "bt": 1681985384511
41
- }
42
- ]
43
- ```
@@ -1,84 +0,0 @@
1
- ---
2
- type: messages
3
- ---
4
-
5
- # Network info
6
-
7
- ## Match Expression
8
-
9
- ```jsonata
10
- appId = 'DEVICE' and $exists(data.networkInfo)
11
- ```
12
-
13
- ## Transform Expression
14
-
15
- ```jsonata
16
- [
17
- {"bn": "14203/0/", "n": "0", "vs": data.networkInfo.networkMode, "bt": ts },
18
- {"n": "1", "v": data.networkInfo.currentBand },
19
- {"n": "2", "v": data.networkInfo.rsrp },
20
- {"n": "3", "v": data.networkInfo.areaCode },
21
- {"n": "4", "v": data.networkInfo.cellID },
22
- {"n": "5", "v": data.networkInfo.mccmnc },
23
- {"n": "6", "vs": data.networkInfo.ipAddress },
24
- {"n": "11", "v": data.networkInfo.eest }
25
- ]
26
- ```
27
-
28
- ## Input Example
29
-
30
- ```json
31
- {
32
- "appId": "DEVICE",
33
- "messageType": "DATA",
34
- "ts": 1676369307222,
35
- "data": {
36
- "networkInfo": {
37
- "currentBand": 20,
38
- "networkMode": "LTE-M",
39
- "rsrp": -79,
40
- "areaCode": 6,
41
- "mccmnc": 24001,
42
- "cellID": 56879116,
43
- "ipAddress": "10.160.243.113"
44
- }
45
- }
46
- }
47
- ```
48
-
49
- ## Result Example
50
-
51
- ```json
52
- [
53
- {
54
- "bn": "14203/0/",
55
- "n": "0",
56
- "vs": "LTE-M",
57
- "bt": 1676369307222
58
- },
59
- {
60
- "n": "1",
61
- "v": 20
62
- },
63
- {
64
- "n": "2",
65
- "v": -79
66
- },
67
- {
68
- "n": "3",
69
- "v": 6
70
- },
71
- {
72
- "n": "4",
73
- "v": 56879116
74
- },
75
- {
76
- "n": "5",
77
- "v": 24001
78
- },
79
- {
80
- "n": "6",
81
- "vs": "10.160.243.113"
82
- }
83
- ]
84
- ```
@@ -1,43 +0,0 @@
1
- ---
2
- type: messages
3
- ---
4
-
5
- # Environment sensor: atmospheric pressure
6
-
7
- ## Match Expression
8
-
9
- ```jsonata
10
- appId = 'AIR_PRESS'
11
- ```
12
-
13
- ## Transform Expression
14
-
15
- ```jsonata
16
- [
17
- {"bn": "14205/0/", "n": "2", "v": $number(data)*10, "bt": ts }
18
- ]
19
- ```
20
-
21
- ## Input Example
22
-
23
- ```json
24
- {
25
- "appId": "AIR_PRESS",
26
- "messageType": "DATA",
27
- "ts": 1681985384511,
28
- "data": "102.31"
29
- }
30
- ```
31
-
32
- ## Result Example
33
-
34
- ```json
35
- [
36
- {
37
- "bn": "14205/0/",
38
- "n": "2",
39
- "v": 1023.1,
40
- "bt": 1681985384511
41
- }
42
- ]
43
- ```
@@ -1,43 +0,0 @@
1
- ---
2
- type: messages
3
- ---
4
-
5
- # Environment sensor: temperature
6
-
7
- ## Match Expression
8
-
9
- ```jsonata
10
- appId = 'TEMP'
11
- ```
12
-
13
- ## Transform Expression
14
-
15
- ```jsonata
16
- [
17
- {"bn": "14205/0/", "n": "0", "v": $number(data), "bt": ts }
18
- ]
19
- ```
20
-
21
- ## Input Example
22
-
23
- ```json
24
- {
25
- "appId": "TEMP",
26
- "messageType": "DATA",
27
- "ts": 1676366336476,
28
- "data": "25.73"
29
- }
30
- ```
31
-
32
- ## Result Example
33
-
34
- ```json
35
- [
36
- {
37
- "bn": "14205/0/",
38
- "n": "0",
39
- "v": 25.73,
40
- "bt": 1676366336476
41
- }
42
- ]
43
- ```
@@ -1,6 +0,0 @@
1
- # `asset_tracker_v2` on AWS
2
-
3
- This implements the conversion for the
4
- [`asset_tracker_v2`](https://github.com/nrfconnect/sdk-nrf/tree/v2.5-branch/applications/asset_tracker_v2)
5
- [message protocol](https://nordicsemiconductor.github.io/asset-tracker-cloud-docs/v2.2.x/)
6
- when connected to AWS IoT.
@@ -1,229 +0,0 @@
1
- import { describe, it } from 'node:test'
2
- import {
3
- senMLtoLwM2M,
4
- type LwM2MObjectInstance,
5
- } from '../../../senml/senMLtoLwM2M.js'
6
- import { TransformType, type Transform } from '../../types.js'
7
- import jsonata from 'jsonata'
8
- import { arrayContaining, check } from 'tsmatchers'
9
- import { models } from '../../../models/models.js'
10
-
11
- void describe('asset_tracker_v2+AWS examples', () => {
12
- for (const [input, expected] of [
13
- [
14
- './shadow/example-1.json',
15
- [
16
- {
17
- ObjectID: 14202,
18
- Resources: {
19
- 1: 4.398,
20
- 99: new Date(1699050063028),
21
- },
22
- },
23
- {
24
- ObjectID: 14205,
25
- Resources: {
26
- 0: 27.06,
27
- 1: 31.125,
28
- 2: 97.748,
29
- 99: new Date(1699050061608),
30
- },
31
- },
32
- {
33
- ObjectID: 14203,
34
- Resources: {
35
- 11: 8,
36
- 99: new Date(1699050062990),
37
- },
38
- },
39
- ],
40
- ],
41
- [
42
- './shadow/example-2.json',
43
- [
44
- {
45
- ObjectID: 14201,
46
- Resources: {
47
- 0: 33.98771459323253,
48
- 1: -84.50632147267358,
49
- 2: 241.9342498779297,
50
- 3: 11.317643165588379,
51
- 4: 0.03478508070111275,
52
- 5: 90.31222534179688,
53
- 6: 'GNSS',
54
- 99: new Date(1699049744000),
55
- },
56
- },
57
- {
58
- ObjectID: 14202,
59
- Resources: {
60
- 1: 4.414,
61
- 99: new Date(1699049729959),
62
- },
63
- },
64
-
65
- {
66
- ObjectID: 14205,
67
- Resources: {
68
- 0: 21.915307998657227,
69
- 1: 34.569278717041016,
70
- 2: 98.846,
71
- 10: 148,
72
- 99: new Date(1699049729518),
73
- },
74
- },
75
- ],
76
- ],
77
- [
78
- './shadow/example-3.json',
79
- [
80
- {
81
- ObjectID: 14203,
82
- Resources: {
83
- 2: -95,
84
- 11: 7,
85
- 99: new Date(1699049610301),
86
- },
87
- },
88
- ],
89
- ],
90
- [
91
- './shadow/example-4.json',
92
- [
93
- {
94
- ObjectID: 14204,
95
- Resources: {
96
- 0: '358299840016535',
97
- 1: '89450421180216254864',
98
- 2: 'mfw_nrf91x1_2.0.0-77.beta',
99
- 3: '0.0.0-development',
100
- 4: 'thingy91x_nrf9161',
101
- 99: new Date(1699284007851),
102
- },
103
- },
104
- {
105
- ObjectID: 14202,
106
- Resources: {
107
- 0: 99,
108
- 1: 4.179,
109
- 2: 0,
110
- 3: 25.7,
111
- 99: new Date(1699049685992),
112
- },
113
- },
114
- ],
115
- ],
116
- [
117
- './shadow/example-5.json',
118
- [
119
- {
120
- ObjectID: 14202,
121
- Resources: {
122
- 0: 89,
123
- 1: 4.161,
124
- 99: new Date(1701900277007),
125
- },
126
- },
127
- ],
128
- ],
129
- ] as [string, Array<LwM2MObjectInstance>][]) {
130
- void it(input, async () => {
131
- const result = await transformShadowUpdateToLwM2M(
132
- (models['asset_tracker_v2+AWS']?.transforms ?? []).filter(
133
- ({ type }) => type === TransformType.Shadow,
134
- ),
135
- )(
136
- await import(input, {
137
- assert: { type: 'json' },
138
- }),
139
- )
140
-
141
- for (const expectedObject of expected) {
142
- check(result).is(arrayContaining(expectedObject))
143
- }
144
- })
145
- }
146
- })
147
-
148
- /**
149
- * Very simple implementation of a converter.
150
- */
151
- const transformShadowUpdateToLwM2M = (transforms: Transform[]) => {
152
- // Turn the JSONata in the transforms into executable functions
153
- const transformFns: Array<{
154
- match: ReturnType<typeof jsonata>
155
- matchExpression: string
156
- transform: ReturnType<typeof jsonata>
157
- transformExpression: string
158
- }> = []
159
-
160
- for (const {
161
- match: matchExpression,
162
- transform: transformExpression,
163
- } of transforms) {
164
- let match: ReturnType<typeof jsonata>
165
- let transform: ReturnType<typeof jsonata>
166
- try {
167
- match = jsonata(matchExpression)
168
- } catch {
169
- throw new Error(`Failed to parse match expression '${matchExpression}'`)
170
- }
171
- try {
172
- transform = jsonata(transformExpression)
173
- } catch {
174
- throw new Error(
175
- `Failed to parse match expression '${transformExpression}'`,
176
- )
177
- }
178
- transformFns.push({
179
- match,
180
- matchExpression,
181
- transform,
182
- transformExpression,
183
- })
184
- }
185
-
186
- return async (input: {
187
- state: {
188
- reported?: Record<string, unknown>
189
- desired?: Record<string, unknown>
190
- }
191
- }): Promise<Array<LwM2MObjectInstance>> =>
192
- Promise.all(
193
- transformFns.map(
194
- async ({ match, matchExpression, transform, transformExpression }) => {
195
- // Check if the `matched` JSONata returns `true`.
196
- try {
197
- const matched = await match.evaluate(input)
198
- if (typeof matched !== 'boolean') return null
199
- if (matched === false) return null
200
- } catch (err) {
201
- console.error(err)
202
- console.error(
203
- `Failed to match ${JSON.stringify(
204
- input,
205
- )} using expression '${matchExpression}'!`,
206
- )
207
- return false
208
- }
209
- // Transform
210
- try {
211
- return await transform.evaluate(input)
212
- } catch (err) {
213
- console.error(err)
214
- console.error(
215
- `Failed to transform ${JSON.stringify(
216
- input,
217
- )} using expression '${transformExpression}'!`,
218
- )
219
- return null
220
- }
221
- },
222
- ),
223
- )
224
- .then((result) => result.flat())
225
- // Ignore unmatched transforms
226
- .then((result) => result.filter((item) => item !== null))
227
- // Convert it to LwM2M
228
- .then(senMLtoLwM2M)
229
- }