@autorunify/capacitor-nrfmesh 0.0.4 → 0.0.6
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.
- package/README.md +7 -6
- package/android/src/main/java/com/autorunify/capacitor/nrfmesh/BleManager.kt +25 -12
- package/android/src/main/java/com/autorunify/capacitor/nrfmesh/NrfMeshPlugin.kt +16 -6
- package/android/src/main/java/com/autorunify/capacitor/nrfmesh/SensorWrapper.kt +8 -6
- package/dist/docs.json +8 -1
- package/dist/esm/definitions.d.ts +2 -1
- package/dist/esm/definitions.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1366,12 +1366,12 @@ Creates a new function.
|
|
|
1366
1366
|
|
|
1367
1367
|
#### ModelOptions
|
|
1368
1368
|
|
|
1369
|
-
| Prop | Type
|
|
1370
|
-
| -------------------- |
|
|
1371
|
-
| **`elementAddress`** | <code>number</code>
|
|
1372
|
-
| **`appkeyIndex`** | <code>number</code>
|
|
1373
|
-
| **`onoff`** | <code>{ set?: <a href="#onoffmodel">OnOffModel</a>; }</code>
|
|
1374
|
-
| **`sensor`** | <code>{ propertyId
|
|
1369
|
+
| Prop | Type |
|
|
1370
|
+
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1371
|
+
| **`elementAddress`** | <code>number</code> |
|
|
1372
|
+
| **`appkeyIndex`** | <code>number</code> |
|
|
1373
|
+
| **`onoff`** | <code>{ set?: <a href="#onoffmodel">OnOffModel</a>; }</code> |
|
|
1374
|
+
| **`sensor`** | <code>{ propertyId?: number; get?: <a href="#omit">Omit</a><<a href="#sensormodel">SensorModel</a>, 'values'>; property?: <a href="#partialany">PartialAny</a><<a href="#sensorrawvalue">SensorRawValue</a>, 'bytes'>; properties?: <a href="#sensorpropertiesmodel">SensorPropertiesModel</a>; }</code> |
|
|
1375
1375
|
|
|
1376
1376
|
|
|
1377
1377
|
#### ScanResults
|
|
@@ -1397,6 +1397,7 @@ Creates a new function.
|
|
|
1397
1397
|
| Prop | Type |
|
|
1398
1398
|
| ------------ | ------------------------------------------------------ |
|
|
1399
1399
|
| **`filter`** | <code>'all' \| 'provisioned' \| 'unprovisioned'</code> |
|
|
1400
|
+
| **`max`** | <code>number</code> |
|
|
1400
1401
|
|
|
1401
1402
|
|
|
1402
1403
|
#### IdentifyResults
|
|
@@ -288,7 +288,7 @@ class BleManager {
|
|
|
288
288
|
}
|
|
289
289
|
}
|
|
290
290
|
|
|
291
|
-
suspend fun devicesWithFilter(filter: String, timeout: Int): List<MeshDevice> {
|
|
291
|
+
suspend fun devicesWithFilter(filter: String, max: Int, timeout: Int): List<MeshDevice> {
|
|
292
292
|
this.scan(false)
|
|
293
293
|
|
|
294
294
|
synchronized(devices) {
|
|
@@ -296,21 +296,34 @@ class BleManager {
|
|
|
296
296
|
}
|
|
297
297
|
|
|
298
298
|
this.scan(true)
|
|
299
|
-
delay(timeout.toLong())
|
|
300
299
|
|
|
301
|
-
val
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
300
|
+
val timeMillis = 200L
|
|
301
|
+
var timeCount = timeout.toLong() / timeMillis
|
|
302
|
+
var devicesByFilter: MutableList<MeshDevice> = mutableListOf()
|
|
303
|
+
|
|
304
|
+
while (timeCount > 0) {
|
|
305
|
+
delay(timeMillis)
|
|
306
|
+
synchronized(devices) {
|
|
307
|
+
devices.forEach { device ->
|
|
308
|
+
if (filter == "provisioned" && device.provisioned) {
|
|
309
|
+
devicesByFilter.add(device)
|
|
310
|
+
} else if (filter == "unprovisioned" && !device.provisioned) {
|
|
311
|
+
devicesByFilter.add(device)
|
|
312
|
+
} else if (filter == "all") {
|
|
313
|
+
devicesByFilter.add(device)
|
|
314
|
+
}
|
|
310
315
|
}
|
|
311
316
|
}
|
|
317
|
+
|
|
318
|
+
if (max > 0 && devicesByFilter.size >= max) {
|
|
319
|
+
break
|
|
320
|
+
} else {
|
|
321
|
+
devicesByFilter = mutableListOf()
|
|
322
|
+
timeCount--;
|
|
323
|
+
}
|
|
312
324
|
}
|
|
313
|
-
|
|
325
|
+
|
|
326
|
+
return devicesByFilter
|
|
314
327
|
}
|
|
315
328
|
|
|
316
329
|
fun disconnect(): Boolean {
|
|
@@ -481,9 +481,14 @@ class NrfMeshPlugin : Plugin {
|
|
|
481
481
|
|
|
482
482
|
CoroutineScope(Dispatchers.IO).launch {
|
|
483
483
|
try {
|
|
484
|
-
val timeout = call.getInt("timeout",
|
|
484
|
+
val timeout = call.getInt("timeout", 5)!!
|
|
485
|
+
val max = call.getInt("max", 0)!!
|
|
485
486
|
val filter = call.getString("filter", "all")
|
|
486
|
-
val devices = ble.devicesWithFilter(
|
|
487
|
+
val devices = ble.devicesWithFilter(
|
|
488
|
+
filter!!,
|
|
489
|
+
max,
|
|
490
|
+
if (timeout <= 0) 1000 else timeout * 1000
|
|
491
|
+
)
|
|
487
492
|
|
|
488
493
|
call.resolve(JSObject().apply {
|
|
489
494
|
put("devices", JSArray().apply {
|
|
@@ -899,17 +904,19 @@ class NrfMeshPlugin : Plugin {
|
|
|
899
904
|
|
|
900
905
|
val sensorOpts = call.getObject("sensor")
|
|
901
906
|
if (sensorOpts != null) {
|
|
902
|
-
val propertyId = sensorOpts.getInteger("propertyId")
|
|
903
|
-
?: return@launch call.reject("sensor options propertyId is required")
|
|
904
|
-
|
|
905
907
|
val getOpts = sensorOpts.getJSObject("get")
|
|
906
908
|
if (getOpts != null) {
|
|
907
|
-
val
|
|
909
|
+
val propertyId = sensorOpts.getInteger("propertyId")
|
|
910
|
+
|
|
911
|
+
val message = SensorGetWrapper(appkey, propertyId?.toShort())
|
|
908
912
|
pairs.add(MessagePair(SENSOR_GET, message))
|
|
909
913
|
}
|
|
910
914
|
|
|
911
915
|
val propertyOpts = sensorOpts.getJSObject("property")
|
|
912
916
|
if (propertyOpts != null) {
|
|
917
|
+
val propertyId = sensorOpts.getInteger("propertyId")
|
|
918
|
+
?: return@launch call.reject("sensor options propertyId is required")
|
|
919
|
+
|
|
913
920
|
val setPropertyId = propertyOpts.getInteger("propertyId")
|
|
914
921
|
?: return@launch call.reject("sensor.property options propertyId is required")
|
|
915
922
|
val setBytes = propertyOpts.optJSONArray("bytes")
|
|
@@ -939,6 +946,9 @@ class NrfMeshPlugin : Plugin {
|
|
|
939
946
|
|
|
940
947
|
val propertiesOpts = sensorOpts.getJSObject("properties")
|
|
941
948
|
if (propertiesOpts != null) {
|
|
949
|
+
val propertyId = sensorOpts.getInteger("propertyId")
|
|
950
|
+
?: return@launch call.reject("sensor options propertyId is required")
|
|
951
|
+
|
|
942
952
|
val message = SensorSettingsGetWrapper(
|
|
943
953
|
appkey,
|
|
944
954
|
propertyId.toShort()
|
|
@@ -16,13 +16,15 @@ import java.nio.ByteBuffer
|
|
|
16
16
|
import java.nio.ByteOrder.LITTLE_ENDIAN
|
|
17
17
|
|
|
18
18
|
class SensorGetWrapper : SensorGet {
|
|
19
|
-
constructor(appkey: ApplicationKey, propertyId: Short)
|
|
19
|
+
constructor(appkey: ApplicationKey, propertyId: Short?)
|
|
20
20
|
: super(appkey, DeviceProperty.UNKNOWN) {
|
|
21
|
-
|
|
22
|
-
.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
if (propertyId != null) {
|
|
22
|
+
this.mParameters = ByteBuffer
|
|
23
|
+
.allocate(2)
|
|
24
|
+
.order(LITTLE_ENDIAN)
|
|
25
|
+
.putShort(propertyId)
|
|
26
|
+
.array()
|
|
27
|
+
}
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
30
|
|
package/dist/docs.json
CHANGED
|
@@ -4869,7 +4869,7 @@
|
|
|
4869
4869
|
"SensorRawValue",
|
|
4870
4870
|
"SensorPropertiesModel"
|
|
4871
4871
|
],
|
|
4872
|
-
"type": "{ propertyId
|
|
4872
|
+
"type": "{ propertyId?: number | undefined; get?: Omit<SensorModel, 'values'> | undefined; property?: PartialAny<SensorRawValue, 'bytes'> | undefined; properties?: SensorPropertiesModel | undefined; } | undefined"
|
|
4873
4873
|
}
|
|
4874
4874
|
]
|
|
4875
4875
|
},
|
|
@@ -4949,6 +4949,13 @@
|
|
|
4949
4949
|
"docs": "",
|
|
4950
4950
|
"complexTypes": [],
|
|
4951
4951
|
"type": "'all' | 'provisioned' | 'unprovisioned' | undefined"
|
|
4952
|
+
},
|
|
4953
|
+
{
|
|
4954
|
+
"name": "max",
|
|
4955
|
+
"tags": [],
|
|
4956
|
+
"docs": "",
|
|
4957
|
+
"complexTypes": [],
|
|
4958
|
+
"type": "number | undefined"
|
|
4952
4959
|
}
|
|
4953
4960
|
]
|
|
4954
4961
|
},
|
|
@@ -229,7 +229,7 @@ export interface ModelOptions extends TimeoutOptions {
|
|
|
229
229
|
set?: OnOffModel;
|
|
230
230
|
};
|
|
231
231
|
sensor?: {
|
|
232
|
-
propertyId
|
|
232
|
+
propertyId?: number;
|
|
233
233
|
get?: Omit<SensorModel, 'values'>;
|
|
234
234
|
property?: PartialAny<SensorRawValue, 'bytes'>;
|
|
235
235
|
properties?: SensorPropertiesModel;
|
|
@@ -252,6 +252,7 @@ export interface MeshDevice {
|
|
|
252
252
|
}
|
|
253
253
|
export interface ScanOptions extends TimeoutOptions {
|
|
254
254
|
filter?: 'all' | 'provisioned' | 'unprovisioned';
|
|
255
|
+
max?: number;
|
|
255
256
|
}
|
|
256
257
|
export interface ScanResults {
|
|
257
258
|
devices: Array<MeshDevice>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core'\n\ntype PartialAny<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nexport type PermissionState = 'denied' | 'granted'\n\nexport type PermissionKey =\n \"android.permission.BLUETOOTH\" |\n \"android.permission.BLUETOOTH_ADMIN\" |\n \"android.permission.ACCESS_COARSE_LOCATION\" |\n \"android.permission.ACCESS_FINE_LOCATION\" |\n \"android.permission.BLUETOOTH_SCAN\" |\n \"android.permission.BLUETOOTH_CONNECT\"\n\n\nexport type Permissions = {\n [key in PermissionKey]: PermissionState;\n}\n\nexport interface BluetoothState {\n enabled: boolean;\n}\n\nexport interface TimeoutOptions {\n timeout?: number\n}\n\nexport interface ConnectionState {\n connected: boolean\n}\n\nexport interface NetKey {\n index: number;\n key: string;\n minSecurity: string;\n name: string;\n phase: number;\n timestamp: string;\n oldKey?: string;\n}\n\nexport interface AppKey {\n index: number\n boundNetKey: number\n key: string\n name: string\n}\n\nexport interface MeshGroup {\n name: string\n address: number\n addressHex: string\n}\n\nexport interface MeshNode {\n name: string\n deviceKey: string\n unicastAddress: number\n security: string\n ttl: number\n netkeys: Array<{ index: number, updated: boolean }>\n appkeys: Array<{ index: number, updated: boolean }>\n elements: Array<{\n name: string\n elementAddress: number\n models: Array<{\n modelId: number\n appkeys: Array<number>\n subscriptions: Array<number>\n publication?: number\n }>\n }>\n features?: {\n friend: number\n lowPower: number\n proxy: number\n relay: number\n }\n networkTransmit?: {\n count: number\n interval: number\n steps: number\n }\n}\n\nexport interface OnOffModel {\n state: boolean\n}\n\nexport interface SensorRawValue {\n propertyId: number\n bytes: Array<number>\n}\n\nexport interface SensorModel {\n values: Array<SensorRawValue>\n}\n\nexport interface SensorPropertiesModel {\n properties: Array<Omit<SensorRawValue, 'bytes'>>\n}\n\nexport interface NetKeysResults {\n netkeys: Array<NetKey>\n}\n\nexport interface NetKeyOptions {\n add?: Omit<NetKey, 'index' | 'key' | 'minSecurity' | 'name' | 'phase' | 'timestamp' | 'oldKey'>\n del?: Omit<NetKey, 'key' | 'minSecurity' | 'name' | 'phase' | 'timestamp' | 'oldKey'>\n get?: Omit<NetKey, 'key' | 'minSecurity' | 'name' | 'phase' | 'timestamp' | 'oldKey'>\n}\n\nexport interface AppKeysOptions {\n boundNetKey: number\n}\n\nexport interface AppKeysResults {\n appkeys: Array<AppKey>\n}\n\nexport interface AppKeyOptions {\n add?: Partial<Omit<AppKey, 'index' | 'key' | 'name'>>\n del?: Omit<AppKey, 'boundNetKey' | 'key' | 'name'>\n get?: Omit<AppKey, 'boundNetKey' | 'key' | 'name'>\n}\n\nexport interface GroupsResults {\n groups: Array<MeshGroup>\n}\n\nexport interface GroupOptions {\n add?: Omit<MeshGroup, 'name' | 'addressHex'>\n del?: Omit<MeshGroup, 'name' | 'addressHex'>\n get?: Omit<MeshGroup, 'name' | 'addressHex'>\n}\n\nexport interface NodesResults {\n nodes: Array<MeshNode>\n}\n\nexport interface NodeDefaultTTL {\n ttl: number;\n}\n\nexport interface NodeNetworkTransmit {\n count: number\n intervalSteps: number\n}\n\nexport interface NodeNetkey {\n netkeyIndex: number\n}\n\nexport interface NodeNetkeys {\n netkeyIndexes: Array<number>\n}\n\nexport interface NodeAppkey {\n netkeyIndex: number\n appkeyIndex: number\n}\n\nexport interface NodeAppkeys {\n netkeyIndex: number\n appkeyIndexes: Array<number>\n}\n\nexport interface ModelAppkey {\n elementAddress: number;\n modelId: number;\n appkeyIndex: number;\n}\n\nexport interface ModelAppkeys {\n elementAddress: number;\n modelId: number;\n appkeyIndexs: Array<number>;\n}\n\nexport interface HeartbeatPub {\n address: number\n count: number\n period: number\n ttl: number\n netkeyIndex: number\n features: {\n friend: number\n proxy: number\n relay: number\n lowPower: number\n }\n}\n\nexport interface HeartbeatSub {\n srcAddress: number\n dstAddress: number\n period: number\n count: number\n minHops: number\n maxHops: number\n}\n\nexport interface NodeOptions extends TimeoutOptions {\n unicastAddress: number\n get?: Object\n defaultTTL?: { set?: NodeDefaultTTL }\n networkTransmit?: { set?: NodeNetworkTransmit }\n netkey?: {\n add?: NodeNetkey\n del?: NodeNetkey\n get?: Omit<NodeNetkeys, 'netkeyIndexes'>\n }\n appkey?: {\n add?: Omit<NodeAppkey, 'netkeyIndex'>\n del?: Omit<NodeAppkey, 'netkeyIndex'>\n get?: Partial<Omit<NodeAppkeys, 'appkeyIndexes'>>\n },\n heartbeat?: {\n pub?: { set?: PartialAny<Omit<HeartbeatPub, 'features'>, 'address' | 'count' | 'netkeyIndex'> }\n sub?: { set?: Omit<HeartbeatSub, 'count' | 'minHops' | 'maxHops'> }\n },\n bind?: {\n add?: ModelAppkey\n del?: ModelAppkey\n get?: Omit<ModelAppkeys, \"appkeyIndexs\">\n }\n}\n\nexport interface NodeResults {\n get?: MeshNode\n defaultTTL?: NodeDefaultTTL\n networkTransmit?: NodeNetworkTransmit\n netkey?: {\n add?: NodeNetkey\n del?: NodeNetkey\n get?: NodeNetkeys\n }\n appkey?: {\n add?: NodeAppkey\n del?: NodeAppkey\n get?: NodeAppkeys\n },\n heartbeat?: {\n pub?: HeartbeatPub\n sub?: HeartbeatSub\n },\n bind?: {\n add?: ModelAppkey\n del?: ModelAppkey\n get?: ModelAppkeys\n }\n}\n\nexport interface ModelOptions extends TimeoutOptions {\n elementAddress: number\n appkeyIndex: number\n onoff?: {\n set?: OnOffModel\n },\n sensor?: {\n propertyId
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core'\n\ntype PartialAny<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nexport type PermissionState = 'denied' | 'granted'\n\nexport type PermissionKey =\n \"android.permission.BLUETOOTH\" |\n \"android.permission.BLUETOOTH_ADMIN\" |\n \"android.permission.ACCESS_COARSE_LOCATION\" |\n \"android.permission.ACCESS_FINE_LOCATION\" |\n \"android.permission.BLUETOOTH_SCAN\" |\n \"android.permission.BLUETOOTH_CONNECT\"\n\n\nexport type Permissions = {\n [key in PermissionKey]: PermissionState;\n}\n\nexport interface BluetoothState {\n enabled: boolean;\n}\n\nexport interface TimeoutOptions {\n timeout?: number\n}\n\nexport interface ConnectionState {\n connected: boolean\n}\n\nexport interface NetKey {\n index: number;\n key: string;\n minSecurity: string;\n name: string;\n phase: number;\n timestamp: string;\n oldKey?: string;\n}\n\nexport interface AppKey {\n index: number\n boundNetKey: number\n key: string\n name: string\n}\n\nexport interface MeshGroup {\n name: string\n address: number\n addressHex: string\n}\n\nexport interface MeshNode {\n name: string\n deviceKey: string\n unicastAddress: number\n security: string\n ttl: number\n netkeys: Array<{ index: number, updated: boolean }>\n appkeys: Array<{ index: number, updated: boolean }>\n elements: Array<{\n name: string\n elementAddress: number\n models: Array<{\n modelId: number\n appkeys: Array<number>\n subscriptions: Array<number>\n publication?: number\n }>\n }>\n features?: {\n friend: number\n lowPower: number\n proxy: number\n relay: number\n }\n networkTransmit?: {\n count: number\n interval: number\n steps: number\n }\n}\n\nexport interface OnOffModel {\n state: boolean\n}\n\nexport interface SensorRawValue {\n propertyId: number\n bytes: Array<number>\n}\n\nexport interface SensorModel {\n values: Array<SensorRawValue>\n}\n\nexport interface SensorPropertiesModel {\n properties: Array<Omit<SensorRawValue, 'bytes'>>\n}\n\nexport interface NetKeysResults {\n netkeys: Array<NetKey>\n}\n\nexport interface NetKeyOptions {\n add?: Omit<NetKey, 'index' | 'key' | 'minSecurity' | 'name' | 'phase' | 'timestamp' | 'oldKey'>\n del?: Omit<NetKey, 'key' | 'minSecurity' | 'name' | 'phase' | 'timestamp' | 'oldKey'>\n get?: Omit<NetKey, 'key' | 'minSecurity' | 'name' | 'phase' | 'timestamp' | 'oldKey'>\n}\n\nexport interface AppKeysOptions {\n boundNetKey: number\n}\n\nexport interface AppKeysResults {\n appkeys: Array<AppKey>\n}\n\nexport interface AppKeyOptions {\n add?: Partial<Omit<AppKey, 'index' | 'key' | 'name'>>\n del?: Omit<AppKey, 'boundNetKey' | 'key' | 'name'>\n get?: Omit<AppKey, 'boundNetKey' | 'key' | 'name'>\n}\n\nexport interface GroupsResults {\n groups: Array<MeshGroup>\n}\n\nexport interface GroupOptions {\n add?: Omit<MeshGroup, 'name' | 'addressHex'>\n del?: Omit<MeshGroup, 'name' | 'addressHex'>\n get?: Omit<MeshGroup, 'name' | 'addressHex'>\n}\n\nexport interface NodesResults {\n nodes: Array<MeshNode>\n}\n\nexport interface NodeDefaultTTL {\n ttl: number;\n}\n\nexport interface NodeNetworkTransmit {\n count: number\n intervalSteps: number\n}\n\nexport interface NodeNetkey {\n netkeyIndex: number\n}\n\nexport interface NodeNetkeys {\n netkeyIndexes: Array<number>\n}\n\nexport interface NodeAppkey {\n netkeyIndex: number\n appkeyIndex: number\n}\n\nexport interface NodeAppkeys {\n netkeyIndex: number\n appkeyIndexes: Array<number>\n}\n\nexport interface ModelAppkey {\n elementAddress: number;\n modelId: number;\n appkeyIndex: number;\n}\n\nexport interface ModelAppkeys {\n elementAddress: number;\n modelId: number;\n appkeyIndexs: Array<number>;\n}\n\nexport interface HeartbeatPub {\n address: number\n count: number\n period: number\n ttl: number\n netkeyIndex: number\n features: {\n friend: number\n proxy: number\n relay: number\n lowPower: number\n }\n}\n\nexport interface HeartbeatSub {\n srcAddress: number\n dstAddress: number\n period: number\n count: number\n minHops: number\n maxHops: number\n}\n\nexport interface NodeOptions extends TimeoutOptions {\n unicastAddress: number\n get?: Object\n defaultTTL?: { set?: NodeDefaultTTL }\n networkTransmit?: { set?: NodeNetworkTransmit }\n netkey?: {\n add?: NodeNetkey\n del?: NodeNetkey\n get?: Omit<NodeNetkeys, 'netkeyIndexes'>\n }\n appkey?: {\n add?: Omit<NodeAppkey, 'netkeyIndex'>\n del?: Omit<NodeAppkey, 'netkeyIndex'>\n get?: Partial<Omit<NodeAppkeys, 'appkeyIndexes'>>\n },\n heartbeat?: {\n pub?: { set?: PartialAny<Omit<HeartbeatPub, 'features'>, 'address' | 'count' | 'netkeyIndex'> }\n sub?: { set?: Omit<HeartbeatSub, 'count' | 'minHops' | 'maxHops'> }\n },\n bind?: {\n add?: ModelAppkey\n del?: ModelAppkey\n get?: Omit<ModelAppkeys, \"appkeyIndexs\">\n }\n}\n\nexport interface NodeResults {\n get?: MeshNode\n defaultTTL?: NodeDefaultTTL\n networkTransmit?: NodeNetworkTransmit\n netkey?: {\n add?: NodeNetkey\n del?: NodeNetkey\n get?: NodeNetkeys\n }\n appkey?: {\n add?: NodeAppkey\n del?: NodeAppkey\n get?: NodeAppkeys\n },\n heartbeat?: {\n pub?: HeartbeatPub\n sub?: HeartbeatSub\n },\n bind?: {\n add?: ModelAppkey\n del?: ModelAppkey\n get?: ModelAppkeys\n }\n}\n\nexport interface ModelOptions extends TimeoutOptions {\n elementAddress: number\n appkeyIndex: number\n onoff?: {\n set?: OnOffModel\n },\n sensor?: {\n propertyId?: number\n get?: Omit<SensorModel, 'values'>\n property?: PartialAny<SensorRawValue, 'bytes'>\n properties?: SensorPropertiesModel\n }\n}\n\nexport interface ModelResults {\n onoff?: OnOffModel,\n sensor?: {\n get?: SensorModel\n property?: SensorRawValue\n properties?: SensorPropertiesModel\n }\n}\n\nexport interface MeshDevice {\n address: string\n name: string\n provisioned: boolean\n rssi: number\n uuid?: string\n}\n\nexport interface ScanOptions extends TimeoutOptions {\n filter?: 'all' | 'provisioned' | 'unprovisioned'\n max?: number\n}\n\nexport interface ScanResults {\n devices: Array<MeshDevice>\n}\n\nexport interface IdentifyOptions extends TimeoutOptions {\n address: string;\n uuid: string;\n}\n\nexport interface IdentifyResults {\n numberOfElements: number;\n availableOOBTypes: Array<string>;\n algorithms: number;\n publicKeyType: number;\n staticOobTypes: number;\n outputOobSize: number;\n outputOobActions: number;\n inputOobSize: number;\n inputOobActions: number;\n}\n\nexport interface ProvisionOptions extends TimeoutOptions {\n address: string;\n uuid: string;\n}\n\nexport interface ProvisionResults {\n completed: boolean;\n uuid: string;\n unicastAddress?: number;\n}\n\nexport interface CompositionOptions extends TimeoutOptions {\n unicastAddress: number\n}\n\nexport interface CompositionResults {\n companyIdentifier: string;\n productIdentifier: string;\n productVersion: string;\n nodeFeaturesSupported: {\n relay: boolean;\n proxy: boolean;\n friend: boolean;\n lowPower: boolean;\n };\n elements: Array<{\n name: string;\n elementAddress: number;\n sigModelCount: number;\n vendorModelCount: number;\n location: number;\n models: Array<{\n modelId: number;\n modelName: string;\n boundAppKeyIndexes: Array<number>;\n }>;\n }>;\n}\n\nexport interface OnStateChangeEvent {\n action: 'enabled' | 'connected'\n state: boolean\n}\n\nexport interface OnNodeChangeEvent {\n action: 'del' | 'add' | 'heartbeat'\n unicastAddress: number\n}\n\nexport interface NrfMeshPlugin {\n checkPermissions(): Promise<Permissions>;\n requestPermissions(): Promise<Permissions>;\n isBluetoothEnabled(): Promise<BluetoothState>;\n\n isConnected(): Promise<ConnectionState>;\n connect(options?: TimeoutOptions): Promise<void>;\n disconnect(options?: TimeoutOptions): Promise<void>;\n\n export(): Promise<any>\n import(options: any): Promise<void>\n\n netkeys(): Promise<NetKeysResults>\n netkey(options: NetKeyOptions): Promise<NetKey>\n\n appkeys(options?: AppKeysOptions): Promise<AppKeysResults>\n appkey(options: AppKeyOptions): Promise<AppKey>\n\n groups(): Promise<GroupsResults>\n group(options: GroupOptions): Promise<MeshGroup>\n\n nodes(): Promise<NodesResults>\n node(options: NodeOptions): Promise<NodeResults>\n\n model(options: ModelOptions): Promise<ModelResults>\n\n init(): Promise<any>;\n kill(): Promise<void>\n devices(options?: ScanOptions): Promise<ScanResults>;\n identify(options: IdentifyOptions): Promise<IdentifyResults>;\n provision(options: ProvisionOptions): Promise<ProvisionResults>;\n composition(options: CompositionOptions): Promise<CompositionResults>;\n\n addListener(\n event: 'state',\n callback: (e: OnStateChangeEvent) => void,\n ): Promise<PluginListenerHandle>;\n addListener(\n event: 'node',\n callback: (e: OnNodeChangeEvent) => void,\n ): Promise<PluginListenerHandle>;\n}\n"]}
|