Loading...
Searching...
No Matches
measurement_manager_example.dart
Go to the documentation of this file.
1import 'dart:async';
2import 'dart:io';
3import 'package:navigine_sdk/navigine_sdk.dart';
4
9class MeasurementManagerExample {
14
15 MeasurementManagerExample() {
16 _initializeSdk();
17 _setupMeasurementListener();
18 }
19
23 void _initializeSdk() {
24 try {
25 // [dart_NavigineSdk_getInstance]
26 // Get SDK instance
28 // [dart_NavigineSdk_getInstance]
29
30 // [dart_NavigineSdk_setUserHash]
31 // Set user hash
32 _sdk?.setUserHash("USER-HASH-HERE");
33 // [dart_NavigineSdk_setUserHash]
34
35 // [dart_NavigineSdk_setServer]
36 // Set server URL (optional)
37 _sdk?.setServer("https://custom.navigine.com");
38 // [dart_NavigineSdk_setServer]
39
40 // [dart_NavigineSdk_getLocationManager]
41 // Get LocationManager for working with locations
43 // [dart_NavigineSdk_getLocationManager]
44
45 // [dart_NavigineSdk_getMeasurementManager]
46 // Get MeasurementManager for working with measurements
48 // [dart_NavigineSdk_getMeasurementManager]
49
50 // [dart_MeasurementManager_setPublishIntervalMs]
51 // Optional: interval between measurement batches sent to listeners (ms)
53 // [dart_MeasurementManager_setPublishIntervalMs]
54
55 if (_locationManager != null && _measurementManager != null) {
56 print("LocationManager and MeasurementManager successfully initialized");
57 }
58 } catch (e) {
59 print("Error initializing SDK: $e");
60 }
61 }
62
66 void _setupMeasurementListener() {
67 _measurementListener = MeasurementListener(
68 // [dart_MeasurementListener_onSensorMeasurementDetected]
69 onSensorMeasurementDetected: (Map<SensorType, SensorMeasurement> sensors) {
70 print("Sensor measurements detected");
71 _demonstrateSensorMeasurements(sensors);
72 },
73 // [dart_MeasurementListener_onSensorMeasurementDetected]
74
75 // [dart_MeasurementListener_onSignalMeasurementDetected]
76 onSignalMeasurementDetected: (Map<String, SignalMeasurement> signals) {
77 print("Signal measurements detected");
78 _demonstrateSignalMeasurements(signals);
79 },
80 // [dart_MeasurementListener_onSignalMeasurementDetected]
81 );
82 }
83
88 if (_measurementManager == null) {
89 print("MeasurementManager not initialized");
90 return;
91 }
92
93 // [dart_MeasurementManager_addMeasurementListener]
94 // Add measurement listener
95 _measurementManager!.addMeasurementListener(_measurementListener!);
96 print("Added measurement listener");
97 // [dart_MeasurementManager_addMeasurementListener]
98
99 // Demonstrate beacon generators
100 _demonstrateBeaconGenerators();
101
102 // Demonstrate Eddystone generators
103 _demonstrateEddystoneGenerators();
104
105 // Demonstrate Wi-Fi generators
106 _demonstrateWifiGenerators();
107
108 // Demonstrate Wi-Fi RTT generators
109 _demonstrateWifiRttGenerators();
110
111 // Demonstrate location generators
112 _demonstrateLocationGenerators();
113
114 // Simulate some time passing for measurements
115 Future.delayed(Duration(seconds: 2), () {
116 // [dart_MeasurementManager_removeMeasurementListener]
117 // Remove measurement listener
118 _measurementManager!.removeMeasurementListener(_measurementListener!);
119 print("Removed measurement listener");
120 // [dart_MeasurementManager_removeMeasurementListener]
121 });
122 }
123
127 void _demonstrateBeaconGenerators() {
128 // [dart_MeasurementManager_addBeaconGenerator]
129 // Add beacon generator
130 String beaconId = _measurementManager!.addBeaconGenerator(
131 "12345678-1234-1234-1234-123456789012", // UUID
132 100, // major
133 200, // minor
134 -60, // power (dBm)
135 5000, // timeout (ms)
136 -80, // rssiMin
137 -40, // rssiMax
138 );
139 print("Added beacon generator with ID: $beaconId");
140 // [dart_MeasurementManager_addBeaconGenerator]
141
142 // [dart_MeasurementManager_removeBleGenerator]
143 // Remove specific BLE generator
144 _measurementManager!.removeBleGenerator(beaconId);
145 print("Removed BLE generator: $beaconId");
146 // [dart_MeasurementManager_removeBleGenerator]
147
148 // [dart_MeasurementManager_removeBleGenerators]
149 // Remove all BLE generators
150 _measurementManager!.removeBleGenerators();
151 print("Removed all BLE generators");
152 // [dart_MeasurementManager_removeBleGenerators]
153 }
154
158 void _demonstrateEddystoneGenerators() {
159 // [dart_MeasurementManager_addEddystoneGenerator]
160 // Add Eddystone generator
161 String eddystoneId = _measurementManager!.addEddystoneGenerator(
162 "12345678901234567890", // namespaceId
163 "1234567890123456", // instanceId
164 -65, // power (dBm)
165 3000, // timeout (ms)
166 -85, // rssiMin
167 -45, // rssiMax
168 );
169 print("Added Eddystone generator with ID: $eddystoneId");
170 // [dart_MeasurementManager_addEddystoneGenerator]
171
172 // Remove Eddystone generator (uses same method as BLE)
173 _measurementManager!.removeBleGenerator(eddystoneId);
174 print("Removed Eddystone generator: $eddystoneId");
175 }
176
180 void _demonstrateWifiGenerators() {
181 // [dart_MeasurementManager_addWifiGenerator]
182 // Add Wi-Fi generator
183 String wifiId = _measurementManager!.addWifiGenerator(
184 "AA:BB:CC:DD:EE:FF", // MAC address
185 4000, // timeout (ms)
186 -90, // rssiMin
187 -50, // rssiMax
188 );
189 print("Added Wi-Fi generator with ID: $wifiId");
190 // [dart_MeasurementManager_addWifiGenerator]
191
192 // [dart_MeasurementManager_removeWifiGenerator]
193 // Remove specific Wi-Fi generator
194 _measurementManager!.removeWifiGenerator(wifiId);
195 print("Removed Wi-Fi generator: $wifiId");
196 // [dart_MeasurementManager_removeWifiGenerator]
197
198 // [dart_MeasurementManager_removeWifiGenerators]
199 // Remove all Wi-Fi generators
200 _measurementManager!.removeWifiGenerators();
201 print("Removed all Wi-Fi generators");
202 // [dart_MeasurementManager_removeWifiGenerators]
203 }
204
208 void _demonstrateWifiRttGenerators() {
209 // [dart_MeasurementManager_addWifiRttGenerator]
210 // Add Wi-Fi RTT generator
211 String wifiRttId = _measurementManager!.addWifiRttGenerator(
212 "11:22:33:44:55:66", // MAC address
213 6000, // timeout (ms)
214 1, // distMin (meters)
215 10, // distMax (meters)
216 0, // stdDevMin
217 2, // stdDevMax
218 -70, // rssiMin
219 -30, // rssiMax
220 );
221 print("Added Wi-Fi RTT generator with ID: $wifiRttId");
222 // [dart_MeasurementManager_addWifiRttGenerator]
223
224 // [dart_MeasurementManager_removeWifiRttGenerator]
225 // Remove specific Wi-Fi RTT generator
226 _measurementManager!.removeWifiRttGenerator(wifiRttId);
227 print("Removed Wi-Fi RTT generator: $wifiRttId");
228 // [dart_MeasurementManager_removeWifiRttGenerator]
229
230 // [dart_MeasurementManager_removeWifiRttGenerators]
231 // Remove all Wi-Fi RTT generators
232 _measurementManager!.removeWifiRttGenerators();
233 print("Removed all Wi-Fi RTT generators");
234 // [dart_MeasurementManager_removeWifiRttGenerators]
235 }
236
240 void _demonstrateLocationGenerators() {
241 // [dart_MeasurementManager_addLocationGenerator]
242 // Add location generator
243 String locationId = _measurementManager!.addLocationGenerator(
244 55.7558, // latMin
245 55.7559, // latMax
246 37.6176, // lonMin
247 37.6177, // lonMax
248 1.0, // accMin (meters)
249 5.0, // accMax (meters)
250 7000, // timeout (ms)
251 );
252 print("Added location generator with ID: $locationId");
253 // [dart_MeasurementManager_addLocationGenerator]
254
255 // [dart_MeasurementManager_removeLocationGenerator]
256 // Remove specific location generator
257 _measurementManager!.removeLocationGenerator(locationId);
258 print("Removed location generator: $locationId");
259 // [dart_MeasurementManager_removeLocationGenerator]
260
261 // [dart_MeasurementManager_removeLocationGenerators]
262 // Remove all location generators
263 _measurementManager!.removeLocationGenerators();
264 print("Removed all location generators");
265 // [dart_MeasurementManager_removeLocationGenerators]
266 }
267
271 void _demonstrateSensorMeasurements(Map<SensorType, SensorMeasurement> sensors) {
272 sensors.forEach((sensorType, measurement) {
273 // [dart_SensorMeasurement_getType]
274 // Get sensor type
275 SensorType type = measurement.type;
276 print("Sensor type: $type");
277 // [dart_SensorMeasurement_getType]
278
279 // [dart_SensorMeasurement_getValues]
280 // Get sensor values
281 Vector3d values = measurement.values;
282 print("Sensor values - X: ${values.x}, Y: ${values.y}, Z: ${values.z}");
283 // [dart_SensorMeasurement_getValues]
284
285 // [dart_SensorMeasurement_getTime]
286 // Get measurement timestamp
287 int time = measurement.time;
288 print("Measurement time: $time ms");
289 // [dart_SensorMeasurement_getTime]
290
291 // Demonstrate Vector3d properties
292 _demonstrateVector3d(values);
293 });
294 }
295
299 void _demonstrateSignalMeasurements(Map<String, SignalMeasurement> signals) {
300 signals.forEach((signalId, measurement) {
301 // [dart_SignalMeasurement_getType]
302 // Get signal type
303 SignalType type = measurement.type;
304 print("Signal type: $type");
305 // [dart_SignalMeasurement_getType]
306
307 // [dart_SignalMeasurement_getId]
308 // Get signal identifier
309 String id = measurement.id;
310 print("Signal ID: $id");
311 // [dart_SignalMeasurement_getId]
312
313 // [dart_SignalMeasurement_getRssi]
314 // Get RSSI value
315 double rssi = measurement.rssi;
316 print("Signal RSSI: $rssi dBm");
317 // [dart_SignalMeasurement_getRssi]
318
319 // [dart_SignalMeasurement_getDistance]
320 // Get estimated distance
321 double distance = measurement.distance;
322 print("Signal distance: $distance meters");
323 // [dart_SignalMeasurement_getDistance]
324
325 // [dart_SignalMeasurement_getTime]
326 // Get measurement timestamp
327 int time = measurement.time;
328 print("Signal measurement time: $time ms");
329 // [dart_SignalMeasurement_getTime]
330 });
331 }
332
336 void _demonstrateVector3d(Vector3d vector) {
337 // [dart_Vector3d_getX]
338 // Get X coordinate
339 double x = vector.x;
340 print("Vector X: $x");
341 // [dart_Vector3d_getX]
342
343 // [dart_Vector3d_getY]
344 // Get Y coordinate
345 double y = vector.y;
346 print("Vector Y: $y");
347 // [dart_Vector3d_getY]
348
349 // [dart_Vector3d_getZ]
350 // Get Z coordinate
351 double z = vector.z;
352 print("Vector Z: $z");
353 // [dart_Vector3d_getZ]
354 }
355
359 Future<void> runExample() async {
360 print("=== MeasurementManager Example ===");
361
363
364 // Wait a bit for measurements
365 await Future.delayed(Duration(seconds: 5));
366
367 print("=== Example completed ===");
368 }
369}
370
374Future<void> main() async {
376 await example.runExample();
377}