diff --git a/app/lib/transport/mock/mock_flight_controller_link.dart b/app/lib/transport/mock/mock_flight_controller_link.dart index 29489ce..2c524e6 100644 --- a/app/lib/transport/mock/mock_flight_controller_link.dart +++ b/app/lib/transport/mock/mock_flight_controller_link.dart @@ -17,13 +17,23 @@ import '../flight_controller_link.dart'; /// bleibt der alte Berlin-Fallback bestehen, damit die Klasse auch ganz /// ohne Mission nutzbar ist. class MockFlightControllerLink implements FlightControllerLink { - MockFlightControllerLink({List initialWaypoints = const []}) - : _anchorLat = initialWaypoints.isEmpty ? 52.5 : initialWaypoints.first.lat, + MockFlightControllerLink({ + List initialWaypoints = const [], + int batteryCellCount = 4, + }) : _anchorLat = initialWaypoints.isEmpty ? 52.5 : initialWaypoints.first.lat, _anchorLon = initialWaypoints.isEmpty ? 13.4 : initialWaypoints.first.lon, - _activeWaypointIndex = initialWaypoints.isEmpty ? null : 0; + _activeWaypointIndex = initialWaypoints.isEmpty ? null : 0, + _batteryCellCount = batteryCellCount; double _anchorLat; double _anchorLon; + + /// Zellenzahl des simulierten Akkus (Doku DroneProfile.batteryCellCount) - + /// bestimmt den Spannungsbereich der Mock-Telemetrie (siehe + /// batteryVoltage unten), damit die Statusanzeige mit den Ampel- + /// Schwellwerten des aktiven Profils zusammenpasst statt fest auf 6S + /// verdrahtet zu sein. + final int _batteryCellCount; final _random = math.Random(); bool _armed = false; @@ -95,10 +105,15 @@ class MockFlightControllerLink implements FlightControllerLink { headingDeg: _heading, armed: _armed, batteryPercent: _batteryPercent.round(), - // 6S-Akku (22.2V nominal), Spannung sinkt mit dem Mock-Ladestand - // mit, damit auch die neue Statusanzeige (Doku: "Drone battery - // Voltage") auf Werteaenderungen reagiert. - batteryVoltage: 18.0 + (_batteryPercent / 100) * 6.0, + // Spannung sinkt mit dem Mock-Ladestand von voll (4.2 V/Zelle, + // LiPo-Ladeschluss) auf nahezu leer (3.0 V/Zelle) mit, skaliert mit + // der Zellenzahl des aktiven Drohnenprofils statt fest auf 6S + // verdrahtet zu sein (Doku: "bei 4s ist 16.8 Volt aber der max + // Wert") - damit reagiert auch die neue Statusanzeige (Doku: "Drone + // battery Voltage") auf Werteaenderungen und durchlaeuft dabei + // realistisch die Ampel-Schwellwerte des Profils. + batteryVoltage: + _batteryCellCount * (3.0 + (_batteryPercent / 100) * 1.2), currentA: 12.5, linkQuality: 95, snrDb: 9, diff --git a/app/lib/ui/providers/telemetry_provider.dart b/app/lib/ui/providers/telemetry_provider.dart index eab41d4..cbe4988 100644 --- a/app/lib/ui/providers/telemetry_provider.dart +++ b/app/lib/ui/providers/telemetry_provider.dart @@ -5,6 +5,7 @@ import '../../transport/flight_controller_link.dart'; import '../../transport/link_transport.dart'; import '../../transport/mock/mock_flight_controller_link.dart'; import '../../transport/msp/msp_flight_controller_link.dart'; +import 'active_drone_profile_provider.dart'; import 'connection_settings_provider.dart'; import 'current_mission_provider.dart'; import 'wifi_connection_provider.dart'; @@ -44,7 +45,14 @@ final flightControllerLinkProvider = Provider((ref) { // verankert werden (Doku: "Mock-Daten fuer die Live-Details-Ansicht // nutzbar machen"), nicht bei jeder spaeteren Missionsaenderung // neu erzeugt werden (das wuerde Timer/Drift/Akkustand zuruecksetzen). - : MockFlightControllerLink(initialWaypoints: ref.read(currentMissionProvider)); + // Gleiches gilt fuer die Zellenzahl: sie bestimmt nur den simulierten + // Spannungsbereich bei der Erzeugung, ein spaeterer Profilwechsel + // waehrend einer laufenden Mock-Verbindung setzt den Akkustand nicht + // zurueck. + : MockFlightControllerLink( + initialWaypoints: ref.read(currentMissionProvider), + batteryCellCount: ref.read(activeDroneProfileProvider).batteryCellCount, + ); ref.onDispose(link.disconnect); return link; });