Replace geofence polling with native Android geofence

This commit is contained in:
Artem Kokos
2026-05-12 11:23:44 +07:00
parent 0a5ef9af17
commit 1963488479
38 changed files with 1099 additions and 1931 deletions

View File

@@ -1,12 +1,15 @@
/// Модель "дома" -- один физический сервер Ignis.
/// Содержит только несекретные настройки. API-ключ хранится отдельно.
class HomeConfig {
static const int defaultGeofenceRadiusMeters = 500;
final String id; // уникальный идентификатор (uuid или timestamp)
final String name; // человекочитаемое название ("Квартира", "Дача")
final String url; // адрес сервера (например ignis.akokos.ru)
final double? latitude; // GPS-широта дома (для гео-автоматизации)
final double? longitude; // GPS-долгота дома (для гео-автоматизации)
final bool geofenceEnabled; // автовыключение при уходе из дома
final int geofenceRadiusMeters; // радиус geofence для автодействий
HomeConfig({
required this.id,
@@ -15,6 +18,7 @@ class HomeConfig {
this.latitude,
this.longitude,
this.geofenceEnabled = false,
this.geofenceRadiusMeters = defaultGeofenceRadiusMeters,
});
/// Есть ли координаты у дома
@@ -31,6 +35,7 @@ class HomeConfig {
if (latitude != null) 'latitude': latitude,
if (longitude != null) 'longitude': longitude,
'geofenceEnabled': geofenceEnabled,
'geofenceRadiusMeters': geofenceRadiusMeters,
};
factory HomeConfig.fromJson(Map<String, dynamic> json) => HomeConfig(
@@ -40,6 +45,10 @@ class HomeConfig {
latitude: (json['latitude'] as num?)?.toDouble(),
longitude: (json['longitude'] as num?)?.toDouble(),
geofenceEnabled: json['geofenceEnabled'] as bool? ?? false,
geofenceRadiusMeters:
((json['geofenceRadiusMeters'] as num?)?.toInt() ??
defaultGeofenceRadiusMeters)
.clamp(100, 5000),
);
/// Копирование с изменениями
@@ -49,6 +58,7 @@ class HomeConfig {
double? latitude,
double? longitude,
bool? geofenceEnabled,
int? geofenceRadiusMeters,
bool clearCoordinates = false,
}) => HomeConfig(
id: id,
@@ -60,5 +70,6 @@ class HomeConfig {
geofenceEnabled: clearCoordinates
? false
: (geofenceEnabled ?? this.geofenceEnabled),
geofenceRadiusMeters: geofenceRadiusMeters ?? this.geofenceRadiusMeters,
);
}