System messages fuer GPS-Fix und Drone connected/disconnected, Batterie-Schwellwerte auf Pro-Zelle umgestellt

- detectSystemMessages() erkennt jetzt auch den Uebergang zu einem GPS-Fix
  (flankengetriggert wie Battery/Failsafe), Meldung "GPS fix acquired (N
  satellites)".
- Die automatisch erkannten Verbindungsmeldungen heissen jetzt "Drone
  connected"/"Drone disconnected" statt "Connected"/"Connection lost" -
  praeziser an die tatsaechliche Bedeutung angelehnt (Eintreffen/Ausbleiben
  echter Telemetrie-Frames, nicht nur des rohen Socket-Zustands).
- DroneProfile: feste Pack-Alarmspannung (batteryVoltageGreenMinV/RedMinV)
  ersetzt durch batteryCellCount + Pro-Zelle-Schwellwerte
  (batteryVoltageGreenMinPerCellV/RedMinPerCellV, LiPo-Standardwerte 3.4/3.2
  V als Default). Die alten Feldnamen bleiben als berechnete Getter
  (Zellenzahl * Pro-Zelle-Wert) erhalten, damit
  telemetry_field_status.dart unveraendert bleibt. T1-Ranger-Standardprofil
  auf 4S gesetzt.
- DB-Schema v8 -> v9 (additiv, alte Pack-Spannungs-Spalten bleiben als tote
  Spalten stehen), Repository und Share-Codec-Im-/Export entsprechend
  angepasst; alte Exportdateien ohne die neuen Felder fallen auf die
  DroneProfile-Defaults zurueck statt eine unbekannte Zellenzahl zu raten.
- DroneProfileEditor: "Battery voltage alarm"-Gruppe um ein Zellenzahl-Feld
  erweitert und auf V/Zelle umbenannt.
- Tests ergaenzt/angepasst: GPS-Fix-Erkennung (Unit + Provider-Integration),
  neuer v8->v9-Migrationstest analog zum bestehenden v7->v8-Test,
  Connected/Disconnected-Umbenennung in Provider- und Widget-Tests,
  Cell-Count-Roundtrip in Repository- und Share-Codec-Tests.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Constantin Leue
2026-08-06 13:06:49 +02:00
co-authored by Claude Sonnet 5
parent b68c16d8e6
commit e902197462
15 changed files with 632 additions and 58 deletions
+28 -1
View File
@@ -64,10 +64,26 @@ class DroneProfiles extends Table {
real().withDefault(const Constant(20.0))();
RealColumn get currentRedMaxA =>
real().withDefault(const Constant(30.0))();
/// Alte, feste Pack-Alarmspannungen (Schema v8) - seit Schema v9 durch
/// batteryCellCount + die *PerCellV-Spalten ersetzt (siehe DroneProfile-
/// Doku). Bewusst NICHT geloescht (diese Codebase migriert additiv, siehe
/// die anderen Schema-Schritte hier), aber von Repository/App nicht mehr
/// gelesen oder geschrieben.
RealColumn get batteryVoltageGreenMinV =>
real().withDefault(const Constant(20.4))();
RealColumn get batteryVoltageRedMinV =>
real().withDefault(const Constant(19.2))();
/// Zellenzahl des LiPo-Akkus (Schema v9, siehe DroneProfile-Doku) - Default
/// 4 passend zum neuen T1-Ranger-Standardprofil (4S).
IntColumn get batteryCellCount =>
integer().withDefault(const Constant(4))();
RealColumn get batteryVoltageGreenMinPerCellV =>
real().withDefault(const Constant(3.4))();
RealColumn get batteryVoltageRedMinPerCellV =>
real().withDefault(const Constant(3.2))();
RealColumn get rxQualityGreenMin =>
real().withDefault(const Constant(70.0))();
RealColumn get rxQualityRedMin =>
@@ -136,7 +152,7 @@ class AppDatabase extends _$AppDatabase {
AppDatabase.forTesting(super.executor);
@override
int get schemaVersion => 8;
int get schemaVersion => 9;
@override
MigrationStrategy get migration => MigrationStrategy(
@@ -203,6 +219,17 @@ class AppDatabase extends _$AppDatabase {
await m.addColumn(droneProfiles, droneProfiles.rxSnrGreenMinDb);
await m.addColumn(droneProfiles, droneProfiles.rxSnrRedMinDb);
}
if (from < 9) {
await m.addColumn(droneProfiles, droneProfiles.batteryCellCount);
await m.addColumn(
droneProfiles,
droneProfiles.batteryVoltageGreenMinPerCellV,
);
await m.addColumn(
droneProfiles,
droneProfiles.batteryVoltageRedMinPerCellV,
);
}
},
);
@@ -817,6 +817,42 @@ class $DroneProfilesTable extends DroneProfiles
requiredDuringInsert: false,
defaultValue: const Constant(19.2),
);
static const VerificationMeta _batteryCellCountMeta = const VerificationMeta(
'batteryCellCount',
);
@override
late final GeneratedColumn<int> batteryCellCount = GeneratedColumn<int>(
'battery_cell_count',
aliasedName,
false,
type: DriftSqlType.int,
requiredDuringInsert: false,
defaultValue: const Constant(4),
);
static const VerificationMeta _batteryVoltageGreenMinPerCellVMeta =
const VerificationMeta('batteryVoltageGreenMinPerCellV');
@override
late final GeneratedColumn<double> batteryVoltageGreenMinPerCellV =
GeneratedColumn<double>(
'battery_voltage_green_min_per_cell_v',
aliasedName,
false,
type: DriftSqlType.double,
requiredDuringInsert: false,
defaultValue: const Constant(3.4),
);
static const VerificationMeta _batteryVoltageRedMinPerCellVMeta =
const VerificationMeta('batteryVoltageRedMinPerCellV');
@override
late final GeneratedColumn<double> batteryVoltageRedMinPerCellV =
GeneratedColumn<double>(
'battery_voltage_red_min_per_cell_v',
aliasedName,
false,
type: DriftSqlType.double,
requiredDuringInsert: false,
defaultValue: const Constant(3.2),
);
static const VerificationMeta _rxQualityGreenMinMeta = const VerificationMeta(
'rxQualityGreenMin',
);
@@ -889,6 +925,9 @@ class $DroneProfilesTable extends DroneProfiles
currentRedMaxA,
batteryVoltageGreenMinV,
batteryVoltageRedMinV,
batteryCellCount,
batteryVoltageGreenMinPerCellV,
batteryVoltageRedMinPerCellV,
rxQualityGreenMin,
rxQualityRedMin,
rxSnrGreenMinDb,
@@ -1101,6 +1140,33 @@ class $DroneProfilesTable extends DroneProfiles
),
);
}
if (data.containsKey('battery_cell_count')) {
context.handle(
_batteryCellCountMeta,
batteryCellCount.isAcceptableOrUnknown(
data['battery_cell_count']!,
_batteryCellCountMeta,
),
);
}
if (data.containsKey('battery_voltage_green_min_per_cell_v')) {
context.handle(
_batteryVoltageGreenMinPerCellVMeta,
batteryVoltageGreenMinPerCellV.isAcceptableOrUnknown(
data['battery_voltage_green_min_per_cell_v']!,
_batteryVoltageGreenMinPerCellVMeta,
),
);
}
if (data.containsKey('battery_voltage_red_min_per_cell_v')) {
context.handle(
_batteryVoltageRedMinPerCellVMeta,
batteryVoltageRedMinPerCellV.isAcceptableOrUnknown(
data['battery_voltage_red_min_per_cell_v']!,
_batteryVoltageRedMinPerCellVMeta,
),
);
}
if (data.containsKey('rx_quality_green_min')) {
context.handle(
_rxQualityGreenMinMeta,
@@ -1230,6 +1296,18 @@ class $DroneProfilesTable extends DroneProfiles
DriftSqlType.double,
data['${effectivePrefix}battery_voltage_red_min_v'],
)!,
batteryCellCount: attachedDatabase.typeMapping.read(
DriftSqlType.int,
data['${effectivePrefix}battery_cell_count'],
)!,
batteryVoltageGreenMinPerCellV: attachedDatabase.typeMapping.read(
DriftSqlType.double,
data['${effectivePrefix}battery_voltage_green_min_per_cell_v'],
)!,
batteryVoltageRedMinPerCellV: attachedDatabase.typeMapping.read(
DriftSqlType.double,
data['${effectivePrefix}battery_voltage_red_min_per_cell_v'],
)!,
rxQualityGreenMin: attachedDatabase.typeMapping.read(
DriftSqlType.double,
data['${effectivePrefix}rx_quality_green_min'],
@@ -1280,8 +1358,20 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
final double hdopRedMax;
final double currentGreenMaxA;
final double currentRedMaxA;
/// Alte, feste Pack-Alarmspannungen (Schema v8) - seit Schema v9 durch
/// batteryCellCount + die *PerCellV-Spalten ersetzt (siehe DroneProfile-
/// Doku). Bewusst NICHT geloescht (diese Codebase migriert additiv, siehe
/// die anderen Schema-Schritte hier), aber von Repository/App nicht mehr
/// gelesen oder geschrieben.
final double batteryVoltageGreenMinV;
final double batteryVoltageRedMinV;
/// Zellenzahl des LiPo-Akkus (Schema v9, siehe DroneProfile-Doku) - Default
/// 4 passend zum neuen T1-Ranger-Standardprofil (4S).
final int batteryCellCount;
final double batteryVoltageGreenMinPerCellV;
final double batteryVoltageRedMinPerCellV;
final double rxQualityGreenMin;
final double rxQualityRedMin;
final double rxSnrGreenMinDb;
@@ -1308,6 +1398,9 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
required this.currentRedMaxA,
required this.batteryVoltageGreenMinV,
required this.batteryVoltageRedMinV,
required this.batteryCellCount,
required this.batteryVoltageGreenMinPerCellV,
required this.batteryVoltageRedMinPerCellV,
required this.rxQualityGreenMin,
required this.rxQualityRedMin,
required this.rxSnrGreenMinDb,
@@ -1339,6 +1432,13 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
batteryVoltageGreenMinV,
);
map['battery_voltage_red_min_v'] = Variable<double>(batteryVoltageRedMinV);
map['battery_cell_count'] = Variable<int>(batteryCellCount);
map['battery_voltage_green_min_per_cell_v'] = Variable<double>(
batteryVoltageGreenMinPerCellV,
);
map['battery_voltage_red_min_per_cell_v'] = Variable<double>(
batteryVoltageRedMinPerCellV,
);
map['rx_quality_green_min'] = Variable<double>(rxQualityGreenMin);
map['rx_quality_red_min'] = Variable<double>(rxQualityRedMin);
map['rx_snr_green_min_db'] = Variable<double>(rxSnrGreenMinDb);
@@ -1369,6 +1469,9 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
currentRedMaxA: Value(currentRedMaxA),
batteryVoltageGreenMinV: Value(batteryVoltageGreenMinV),
batteryVoltageRedMinV: Value(batteryVoltageRedMinV),
batteryCellCount: Value(batteryCellCount),
batteryVoltageGreenMinPerCellV: Value(batteryVoltageGreenMinPerCellV),
batteryVoltageRedMinPerCellV: Value(batteryVoltageRedMinPerCellV),
rxQualityGreenMin: Value(rxQualityGreenMin),
rxQualityRedMin: Value(rxQualityRedMin),
rxSnrGreenMinDb: Value(rxSnrGreenMinDb),
@@ -1407,6 +1510,13 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
batteryVoltageRedMinV: serializer.fromJson<double>(
json['batteryVoltageRedMinV'],
),
batteryCellCount: serializer.fromJson<int>(json['batteryCellCount']),
batteryVoltageGreenMinPerCellV: serializer.fromJson<double>(
json['batteryVoltageGreenMinPerCellV'],
),
batteryVoltageRedMinPerCellV: serializer.fromJson<double>(
json['batteryVoltageRedMinPerCellV'],
),
rxQualityGreenMin: serializer.fromJson<double>(json['rxQualityGreenMin']),
rxQualityRedMin: serializer.fromJson<double>(json['rxQualityRedMin']),
rxSnrGreenMinDb: serializer.fromJson<double>(json['rxSnrGreenMinDb']),
@@ -1440,6 +1550,13 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
batteryVoltageGreenMinV,
),
'batteryVoltageRedMinV': serializer.toJson<double>(batteryVoltageRedMinV),
'batteryCellCount': serializer.toJson<int>(batteryCellCount),
'batteryVoltageGreenMinPerCellV': serializer.toJson<double>(
batteryVoltageGreenMinPerCellV,
),
'batteryVoltageRedMinPerCellV': serializer.toJson<double>(
batteryVoltageRedMinPerCellV,
),
'rxQualityGreenMin': serializer.toJson<double>(rxQualityGreenMin),
'rxQualityRedMin': serializer.toJson<double>(rxQualityRedMin),
'rxSnrGreenMinDb': serializer.toJson<double>(rxSnrGreenMinDb),
@@ -1469,6 +1586,9 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
double? currentRedMaxA,
double? batteryVoltageGreenMinV,
double? batteryVoltageRedMinV,
int? batteryCellCount,
double? batteryVoltageGreenMinPerCellV,
double? batteryVoltageRedMinPerCellV,
double? rxQualityGreenMin,
double? rxQualityRedMin,
double? rxSnrGreenMinDb,
@@ -1496,6 +1616,11 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
batteryVoltageGreenMinV:
batteryVoltageGreenMinV ?? this.batteryVoltageGreenMinV,
batteryVoltageRedMinV: batteryVoltageRedMinV ?? this.batteryVoltageRedMinV,
batteryCellCount: batteryCellCount ?? this.batteryCellCount,
batteryVoltageGreenMinPerCellV:
batteryVoltageGreenMinPerCellV ?? this.batteryVoltageGreenMinPerCellV,
batteryVoltageRedMinPerCellV:
batteryVoltageRedMinPerCellV ?? this.batteryVoltageRedMinPerCellV,
rxQualityGreenMin: rxQualityGreenMin ?? this.rxQualityGreenMin,
rxQualityRedMin: rxQualityRedMin ?? this.rxQualityRedMin,
rxSnrGreenMinDb: rxSnrGreenMinDb ?? this.rxSnrGreenMinDb,
@@ -1556,6 +1681,16 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
batteryVoltageRedMinV: data.batteryVoltageRedMinV.present
? data.batteryVoltageRedMinV.value
: this.batteryVoltageRedMinV,
batteryCellCount: data.batteryCellCount.present
? data.batteryCellCount.value
: this.batteryCellCount,
batteryVoltageGreenMinPerCellV:
data.batteryVoltageGreenMinPerCellV.present
? data.batteryVoltageGreenMinPerCellV.value
: this.batteryVoltageGreenMinPerCellV,
batteryVoltageRedMinPerCellV: data.batteryVoltageRedMinPerCellV.present
? data.batteryVoltageRedMinPerCellV.value
: this.batteryVoltageRedMinPerCellV,
rxQualityGreenMin: data.rxQualityGreenMin.present
? data.rxQualityGreenMin.value
: this.rxQualityGreenMin,
@@ -1595,6 +1730,13 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
..write('currentRedMaxA: $currentRedMaxA, ')
..write('batteryVoltageGreenMinV: $batteryVoltageGreenMinV, ')
..write('batteryVoltageRedMinV: $batteryVoltageRedMinV, ')
..write('batteryCellCount: $batteryCellCount, ')
..write(
'batteryVoltageGreenMinPerCellV: $batteryVoltageGreenMinPerCellV, ',
)
..write(
'batteryVoltageRedMinPerCellV: $batteryVoltageRedMinPerCellV, ',
)
..write('rxQualityGreenMin: $rxQualityGreenMin, ')
..write('rxQualityRedMin: $rxQualityRedMin, ')
..write('rxSnrGreenMinDb: $rxSnrGreenMinDb, ')
@@ -1626,6 +1768,9 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
currentRedMaxA,
batteryVoltageGreenMinV,
batteryVoltageRedMinV,
batteryCellCount,
batteryVoltageGreenMinPerCellV,
batteryVoltageRedMinPerCellV,
rxQualityGreenMin,
rxQualityRedMin,
rxSnrGreenMinDb,
@@ -1656,6 +1801,11 @@ class DroneProfile extends DataClass implements Insertable<DroneProfile> {
other.currentRedMaxA == this.currentRedMaxA &&
other.batteryVoltageGreenMinV == this.batteryVoltageGreenMinV &&
other.batteryVoltageRedMinV == this.batteryVoltageRedMinV &&
other.batteryCellCount == this.batteryCellCount &&
other.batteryVoltageGreenMinPerCellV ==
this.batteryVoltageGreenMinPerCellV &&
other.batteryVoltageRedMinPerCellV ==
this.batteryVoltageRedMinPerCellV &&
other.rxQualityGreenMin == this.rxQualityGreenMin &&
other.rxQualityRedMin == this.rxQualityRedMin &&
other.rxSnrGreenMinDb == this.rxSnrGreenMinDb &&
@@ -1684,6 +1834,9 @@ class DroneProfilesCompanion extends UpdateCompanion<DroneProfile> {
final Value<double> currentRedMaxA;
final Value<double> batteryVoltageGreenMinV;
final Value<double> batteryVoltageRedMinV;
final Value<int> batteryCellCount;
final Value<double> batteryVoltageGreenMinPerCellV;
final Value<double> batteryVoltageRedMinPerCellV;
final Value<double> rxQualityGreenMin;
final Value<double> rxQualityRedMin;
final Value<double> rxSnrGreenMinDb;
@@ -1710,6 +1863,9 @@ class DroneProfilesCompanion extends UpdateCompanion<DroneProfile> {
this.currentRedMaxA = const Value.absent(),
this.batteryVoltageGreenMinV = const Value.absent(),
this.batteryVoltageRedMinV = const Value.absent(),
this.batteryCellCount = const Value.absent(),
this.batteryVoltageGreenMinPerCellV = const Value.absent(),
this.batteryVoltageRedMinPerCellV = const Value.absent(),
this.rxQualityGreenMin = const Value.absent(),
this.rxQualityRedMin = const Value.absent(),
this.rxSnrGreenMinDb = const Value.absent(),
@@ -1737,6 +1893,9 @@ class DroneProfilesCompanion extends UpdateCompanion<DroneProfile> {
this.currentRedMaxA = const Value.absent(),
this.batteryVoltageGreenMinV = const Value.absent(),
this.batteryVoltageRedMinV = const Value.absent(),
this.batteryCellCount = const Value.absent(),
this.batteryVoltageGreenMinPerCellV = const Value.absent(),
this.batteryVoltageRedMinPerCellV = const Value.absent(),
this.rxQualityGreenMin = const Value.absent(),
this.rxQualityRedMin = const Value.absent(),
this.rxSnrGreenMinDb = const Value.absent(),
@@ -1775,6 +1934,9 @@ class DroneProfilesCompanion extends UpdateCompanion<DroneProfile> {
Expression<double>? currentRedMaxA,
Expression<double>? batteryVoltageGreenMinV,
Expression<double>? batteryVoltageRedMinV,
Expression<int>? batteryCellCount,
Expression<double>? batteryVoltageGreenMinPerCellV,
Expression<double>? batteryVoltageRedMinPerCellV,
Expression<double>? rxQualityGreenMin,
Expression<double>? rxQualityRedMin,
Expression<double>? rxSnrGreenMinDb,
@@ -1804,6 +1966,11 @@ class DroneProfilesCompanion extends UpdateCompanion<DroneProfile> {
'battery_voltage_green_min_v': batteryVoltageGreenMinV,
if (batteryVoltageRedMinV != null)
'battery_voltage_red_min_v': batteryVoltageRedMinV,
if (batteryCellCount != null) 'battery_cell_count': batteryCellCount,
if (batteryVoltageGreenMinPerCellV != null)
'battery_voltage_green_min_per_cell_v': batteryVoltageGreenMinPerCellV,
if (batteryVoltageRedMinPerCellV != null)
'battery_voltage_red_min_per_cell_v': batteryVoltageRedMinPerCellV,
if (rxQualityGreenMin != null) 'rx_quality_green_min': rxQualityGreenMin,
if (rxQualityRedMin != null) 'rx_quality_red_min': rxQualityRedMin,
if (rxSnrGreenMinDb != null) 'rx_snr_green_min_db': rxSnrGreenMinDb,
@@ -1833,6 +2000,9 @@ class DroneProfilesCompanion extends UpdateCompanion<DroneProfile> {
Value<double>? currentRedMaxA,
Value<double>? batteryVoltageGreenMinV,
Value<double>? batteryVoltageRedMinV,
Value<int>? batteryCellCount,
Value<double>? batteryVoltageGreenMinPerCellV,
Value<double>? batteryVoltageRedMinPerCellV,
Value<double>? rxQualityGreenMin,
Value<double>? rxQualityRedMin,
Value<double>? rxSnrGreenMinDb,
@@ -1862,6 +2032,11 @@ class DroneProfilesCompanion extends UpdateCompanion<DroneProfile> {
batteryVoltageGreenMinV ?? this.batteryVoltageGreenMinV,
batteryVoltageRedMinV:
batteryVoltageRedMinV ?? this.batteryVoltageRedMinV,
batteryCellCount: batteryCellCount ?? this.batteryCellCount,
batteryVoltageGreenMinPerCellV:
batteryVoltageGreenMinPerCellV ?? this.batteryVoltageGreenMinPerCellV,
batteryVoltageRedMinPerCellV:
batteryVoltageRedMinPerCellV ?? this.batteryVoltageRedMinPerCellV,
rxQualityGreenMin: rxQualityGreenMin ?? this.rxQualityGreenMin,
rxQualityRedMin: rxQualityRedMin ?? this.rxQualityRedMin,
rxSnrGreenMinDb: rxSnrGreenMinDb ?? this.rxSnrGreenMinDb,
@@ -1939,6 +2114,19 @@ class DroneProfilesCompanion extends UpdateCompanion<DroneProfile> {
batteryVoltageRedMinV.value,
);
}
if (batteryCellCount.present) {
map['battery_cell_count'] = Variable<int>(batteryCellCount.value);
}
if (batteryVoltageGreenMinPerCellV.present) {
map['battery_voltage_green_min_per_cell_v'] = Variable<double>(
batteryVoltageGreenMinPerCellV.value,
);
}
if (batteryVoltageRedMinPerCellV.present) {
map['battery_voltage_red_min_per_cell_v'] = Variable<double>(
batteryVoltageRedMinPerCellV.value,
);
}
if (rxQualityGreenMin.present) {
map['rx_quality_green_min'] = Variable<double>(rxQualityGreenMin.value);
}
@@ -1978,6 +2166,13 @@ class DroneProfilesCompanion extends UpdateCompanion<DroneProfile> {
..write('currentRedMaxA: $currentRedMaxA, ')
..write('batteryVoltageGreenMinV: $batteryVoltageGreenMinV, ')
..write('batteryVoltageRedMinV: $batteryVoltageRedMinV, ')
..write('batteryCellCount: $batteryCellCount, ')
..write(
'batteryVoltageGreenMinPerCellV: $batteryVoltageGreenMinPerCellV, ',
)
..write(
'batteryVoltageRedMinPerCellV: $batteryVoltageRedMinPerCellV, ',
)
..write('rxQualityGreenMin: $rxQualityGreenMin, ')
..write('rxQualityRedMin: $rxQualityRedMin, ')
..write('rxSnrGreenMinDb: $rxSnrGreenMinDb, ')
@@ -3018,6 +3213,9 @@ typedef $$DroneProfilesTableCreateCompanionBuilder =
Value<double> currentRedMaxA,
Value<double> batteryVoltageGreenMinV,
Value<double> batteryVoltageRedMinV,
Value<int> batteryCellCount,
Value<double> batteryVoltageGreenMinPerCellV,
Value<double> batteryVoltageRedMinPerCellV,
Value<double> rxQualityGreenMin,
Value<double> rxQualityRedMin,
Value<double> rxSnrGreenMinDb,
@@ -3046,6 +3244,9 @@ typedef $$DroneProfilesTableUpdateCompanionBuilder =
Value<double> currentRedMaxA,
Value<double> batteryVoltageGreenMinV,
Value<double> batteryVoltageRedMinV,
Value<int> batteryCellCount,
Value<double> batteryVoltageGreenMinPerCellV,
Value<double> batteryVoltageRedMinPerCellV,
Value<double> rxQualityGreenMin,
Value<double> rxQualityRedMin,
Value<double> rxSnrGreenMinDb,
@@ -3166,6 +3367,22 @@ class $$DroneProfilesTableFilterComposer
builder: (column) => ColumnFilters(column),
);
ColumnFilters<int> get batteryCellCount => $composableBuilder(
column: $table.batteryCellCount,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<double> get batteryVoltageGreenMinPerCellV =>
$composableBuilder(
column: $table.batteryVoltageGreenMinPerCellV,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<double> get batteryVoltageRedMinPerCellV => $composableBuilder(
column: $table.batteryVoltageRedMinPerCellV,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<double> get rxQualityGreenMin => $composableBuilder(
column: $table.rxQualityGreenMin,
builder: (column) => ColumnFilters(column),
@@ -3301,6 +3518,23 @@ class $$DroneProfilesTableOrderingComposer
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<int> get batteryCellCount => $composableBuilder(
column: $table.batteryCellCount,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<double> get batteryVoltageGreenMinPerCellV =>
$composableBuilder(
column: $table.batteryVoltageGreenMinPerCellV,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<double> get batteryVoltageRedMinPerCellV =>
$composableBuilder(
column: $table.batteryVoltageRedMinPerCellV,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<double> get rxQualityGreenMin => $composableBuilder(
column: $table.rxQualityGreenMin,
builder: (column) => ColumnOrderings(column),
@@ -3426,6 +3660,23 @@ class $$DroneProfilesTableAnnotationComposer
builder: (column) => column,
);
GeneratedColumn<int> get batteryCellCount => $composableBuilder(
column: $table.batteryCellCount,
builder: (column) => column,
);
GeneratedColumn<double> get batteryVoltageGreenMinPerCellV =>
$composableBuilder(
column: $table.batteryVoltageGreenMinPerCellV,
builder: (column) => column,
);
GeneratedColumn<double> get batteryVoltageRedMinPerCellV =>
$composableBuilder(
column: $table.batteryVoltageRedMinPerCellV,
builder: (column) => column,
);
GeneratedColumn<double> get rxQualityGreenMin => $composableBuilder(
column: $table.rxQualityGreenMin,
builder: (column) => column,
@@ -3499,6 +3750,11 @@ class $$DroneProfilesTableTableManager
Value<double> currentRedMaxA = const Value.absent(),
Value<double> batteryVoltageGreenMinV = const Value.absent(),
Value<double> batteryVoltageRedMinV = const Value.absent(),
Value<int> batteryCellCount = const Value.absent(),
Value<double> batteryVoltageGreenMinPerCellV =
const Value.absent(),
Value<double> batteryVoltageRedMinPerCellV =
const Value.absent(),
Value<double> rxQualityGreenMin = const Value.absent(),
Value<double> rxQualityRedMin = const Value.absent(),
Value<double> rxSnrGreenMinDb = const Value.absent(),
@@ -3525,6 +3781,9 @@ class $$DroneProfilesTableTableManager
currentRedMaxA: currentRedMaxA,
batteryVoltageGreenMinV: batteryVoltageGreenMinV,
batteryVoltageRedMinV: batteryVoltageRedMinV,
batteryCellCount: batteryCellCount,
batteryVoltageGreenMinPerCellV: batteryVoltageGreenMinPerCellV,
batteryVoltageRedMinPerCellV: batteryVoltageRedMinPerCellV,
rxQualityGreenMin: rxQualityGreenMin,
rxQualityRedMin: rxQualityRedMin,
rxSnrGreenMinDb: rxSnrGreenMinDb,
@@ -3553,6 +3812,11 @@ class $$DroneProfilesTableTableManager
Value<double> currentRedMaxA = const Value.absent(),
Value<double> batteryVoltageGreenMinV = const Value.absent(),
Value<double> batteryVoltageRedMinV = const Value.absent(),
Value<int> batteryCellCount = const Value.absent(),
Value<double> batteryVoltageGreenMinPerCellV =
const Value.absent(),
Value<double> batteryVoltageRedMinPerCellV =
const Value.absent(),
Value<double> rxQualityGreenMin = const Value.absent(),
Value<double> rxQualityRedMin = const Value.absent(),
Value<double> rxSnrGreenMinDb = const Value.absent(),
@@ -3579,6 +3843,9 @@ class $$DroneProfilesTableTableManager
currentRedMaxA: currentRedMaxA,
batteryVoltageGreenMinV: batteryVoltageGreenMinV,
batteryVoltageRedMinV: batteryVoltageRedMinV,
batteryCellCount: batteryCellCount,
batteryVoltageGreenMinPerCellV: batteryVoltageGreenMinPerCellV,
batteryVoltageRedMinPerCellV: batteryVoltageRedMinPerCellV,
rxQualityGreenMin: rxQualityGreenMin,
rxQualityRedMin: rxQualityRedMin,
rxSnrGreenMinDb: rxSnrGreenMinDb,
@@ -66,8 +66,9 @@ class DroneProfileRepository {
hdopRedMax: row.hdopRedMax,
currentGreenMaxA: row.currentGreenMaxA,
currentRedMaxA: row.currentRedMaxA,
batteryVoltageGreenMinV: row.batteryVoltageGreenMinV,
batteryVoltageRedMinV: row.batteryVoltageRedMinV,
batteryCellCount: row.batteryCellCount,
batteryVoltageGreenMinPerCellV: row.batteryVoltageGreenMinPerCellV,
batteryVoltageRedMinPerCellV: row.batteryVoltageRedMinPerCellV,
rxQualityGreenMin: row.rxQualityGreenMin,
rxQualityRedMin: row.rxQualityRedMin,
rxSnrGreenMinDb: row.rxSnrGreenMinDb,
@@ -94,8 +95,9 @@ class DroneProfileRepository {
hdopRedMax: Value(profile.hdopRedMax),
currentGreenMaxA: Value(profile.currentGreenMaxA),
currentRedMaxA: Value(profile.currentRedMaxA),
batteryVoltageGreenMinV: Value(profile.batteryVoltageGreenMinV),
batteryVoltageRedMinV: Value(profile.batteryVoltageRedMinV),
batteryCellCount: Value(profile.batteryCellCount),
batteryVoltageGreenMinPerCellV: Value(profile.batteryVoltageGreenMinPerCellV),
batteryVoltageRedMinPerCellV: Value(profile.batteryVoltageRedMinPerCellV),
rxQualityGreenMin: Value(profile.rxQualityGreenMin),
rxQualityRedMin: Value(profile.rxQualityRedMin),
rxSnrGreenMinDb: Value(profile.rxSnrGreenMinDb),
@@ -30,8 +30,9 @@ String buildDroneExportJson(DroneProfile profile) {
'hdopRedMax': profile.hdopRedMax,
'currentGreenMaxA': profile.currentGreenMaxA,
'currentRedMaxA': profile.currentRedMaxA,
'batteryVoltageGreenMinV': profile.batteryVoltageGreenMinV,
'batteryVoltageRedMinV': profile.batteryVoltageRedMinV,
'batteryCellCount': profile.batteryCellCount,
'batteryVoltageGreenMinPerCellV': profile.batteryVoltageGreenMinPerCellV,
'batteryVoltageRedMinPerCellV': profile.batteryVoltageRedMinPerCellV,
'rxQualityGreenMin': profile.rxQualityGreenMin,
'rxQualityRedMin': profile.rxQualityRedMin,
'rxSnrGreenMinDb': profile.rxSnrGreenMinDb,
@@ -109,6 +110,11 @@ ParsedDroneImport parseDroneImportJson(String jsonText) {
return v is num ? v.toDouble() : fallback;
}
int intOrDefault(String field, int fallback) {
final v = droneData[field];
return v is num ? v.round() : fallback;
}
final profile = DroneProfile(
name: name,
minSpeed: (droneData['minSpeed'] as num).toDouble(),
@@ -128,13 +134,22 @@ ParsedDroneImport parseDroneImportJson(String jsonText) {
hdopRedMax: numOrDefault('hdopRedMax', DroneProfile.defaultHdopRedMax),
currentGreenMaxA: numOrDefault('currentGreenMaxA', DroneProfile.defaultCurrentGreenMaxA),
currentRedMaxA: numOrDefault('currentRedMaxA', DroneProfile.defaultCurrentRedMaxA),
batteryVoltageGreenMinV: numOrDefault(
'batteryVoltageGreenMinV',
DroneProfile.defaultBatteryVoltageGreenMinV,
// batteryCellCount/*PerCellV sind Schema-v9-Felder (Doku: "zellen anzahl
// ... hinzufuegen") - Dateien, die vor deren Einfuehrung exportiert
// wurden, haben stattdessen ggf. noch die alten absoluten
// batteryVoltage*MinV-Felder (feste Pack-Spannung). Die werden hier
// bewusst NICHT mehr gelesen (koennten ohne bekannte Zellenzahl der
// Quelldrohne nicht sinnvoll in Pro-Zelle-Werte umgerechnet werden) -
// stattdessen gelten wie bei allen anderen Schwellwerten die
// DroneProfile.default*-Werte.
batteryCellCount: intOrDefault('batteryCellCount', DroneProfile.defaultBatteryCellCount),
batteryVoltageGreenMinPerCellV: numOrDefault(
'batteryVoltageGreenMinPerCellV',
DroneProfile.defaultBatteryVoltageGreenMinPerCellV,
),
batteryVoltageRedMinV: numOrDefault(
'batteryVoltageRedMinV',
DroneProfile.defaultBatteryVoltageRedMinV,
batteryVoltageRedMinPerCellV: numOrDefault(
'batteryVoltageRedMinPerCellV',
DroneProfile.defaultBatteryVoltageRedMinPerCellV,
),
rxQualityGreenMin: numOrDefault('rxQualityGreenMin', DroneProfile.defaultRxQualityGreenMin),
rxQualityRedMin: numOrDefault('rxQualityRedMin', DroneProfile.defaultRxQualityRedMin),