95 lines
2.8 KiB
Dart
95 lines
2.8 KiB
Dart
import '../../domain/models/sensor.dart';
|
|
import '../sources/localiser/realtime_data_client.dart';
|
|
import '../sources/localiser/sensor_client.dart';
|
|
import 'sensor_repository.dart';
|
|
|
|
class PhoenixSensorRepository implements SensorRepository {
|
|
const PhoenixSensorRepository({
|
|
required this.client,
|
|
required this.realtime,
|
|
});
|
|
|
|
final SensorClient client;
|
|
final RealtimeDataClient realtime;
|
|
|
|
@override
|
|
Future<Sensor> createSensor(String sensorId, {String? name}) async =>
|
|
Sensor.fromJson(await client.createSensor(sensorId, name: name));
|
|
|
|
@override
|
|
Future<List<Sensor>> getSensors() async {
|
|
final list = await client.getSensors();
|
|
return list.map((j) => Sensor.fromJson(j as Map<String, dynamic>)).toList();
|
|
}
|
|
|
|
@override
|
|
Future<List<Sensor>> getUnplacedSensors() async {
|
|
final list = await client.getUnplacedSensors();
|
|
return list.map((j) => Sensor.fromJson(j as Map<String, dynamic>)).toList();
|
|
}
|
|
|
|
@override
|
|
Future<Sensor> getSensor(int id) async =>
|
|
Sensor.fromJson(await client.getSensor(id));
|
|
|
|
@override
|
|
Future<Sensor> updateSensor(int id, {String? name}) async {
|
|
final params = <String, dynamic>{};
|
|
if (name != null) params['name'] = name;
|
|
return Sensor.fromJson(await client.updateSensor(id, params));
|
|
}
|
|
|
|
@override
|
|
Future<void> deleteSensor(int id) => client.deleteSensor(id);
|
|
|
|
@override
|
|
Future<Sensor> placeSensor(int id,
|
|
{required int roomId, required double x, required double y}) async =>
|
|
Sensor.fromJson(
|
|
await client.placeSensor(id, {'room_id': roomId, 'x': x, 'y': y}));
|
|
|
|
@override
|
|
Future<Sensor> unplaceSensor(int id) async =>
|
|
Sensor.fromJson(await client.unplaceSensor(id));
|
|
|
|
@override
|
|
Future<String?> getVersion(int id) => client.getVersion(id);
|
|
|
|
@override
|
|
Stream<Map<String, dynamic>> sensorEvents() => realtime
|
|
.channelMessages('sensors')
|
|
.map((m) => {'event': m.event, ...m.payload});
|
|
|
|
@override
|
|
Future<int> beginCalibration(int id) async {
|
|
final json = await client.beginCalibration(id);
|
|
return json['samples_needed'] as int;
|
|
}
|
|
|
|
@override
|
|
Future<void> startStage(int id, double distance) =>
|
|
client.startStage(id, distance);
|
|
|
|
@override
|
|
Future<({double rssiRef, double pathLossExp})> finishCalibration(
|
|
int id) async {
|
|
final json = await client.finishCalibration(id);
|
|
return (
|
|
rssiRef: (json['rssi_ref'] as num).toDouble(),
|
|
pathLossExp: (json['path_loss_exp'] as num).toDouble(),
|
|
);
|
|
}
|
|
|
|
@override
|
|
Future<void> cancelCalibration(int id) => client.cancelCalibration(id);
|
|
|
|
@override
|
|
Stream<({String event, Map<String, dynamic> payload})> calibrationEvents(
|
|
String sensorDeviceId) =>
|
|
realtime.channelMessages('calibration:$sensorDeviceId');
|
|
|
|
@override
|
|
void leaveCalibrationChannel(String sensorDeviceId) =>
|
|
realtime.leaveChannel('calibration:$sensorDeviceId');
|
|
}
|