2026-05-15 10:43:21 +07:00
2026-05-07 21:42:28 +07:00
2026-04-13 22:13:56 +07:00
2026-05-07 21:42:28 +07:00

Ignis App

Android-клиент для self-hosted backend Ignis Core. Приложение управляет группами ламп WiZ, расписаниями, API-ключами и гео-автоматизацией ухода из дома.

Что умеет

  • несколько домов с отдельными URL и API-ключами;
  • управление группами света: on/off, яркость, температура, RGB, сцены;
  • таймер "включить на 4 часа";
  • одноразовые и повторяющиеся расписания;
  • статистика и лог событий;
  • управление гостевыми API-ключами для администратора;
  • расстояние до дома и автовыключение света по geofence.

Гео-автоматизация

Для активного дома приложение может зарегистрировать системный Android geofence. После подтверждённого EXIT запускается короткая фоновая задача, которая проверяет группы и выключает только те, что реально включены. После успешной фоновой обработки приложение может показать локальное подтверждение через Android notifications.

Это не polling каждые 15 минут. Основной триггер здесь событийный:

  • geofence регистрируется нативно через Android geofencing API;
  • сетевое выключение выполняется отдельным one-off worker;
  • при отсутствии координат или выключенной опции geofence не армится.

Стек

  • Flutter / Dart
  • Riverpod
  • Dio
  • SharedPreferences
  • flutter_secure_storage
  • Geolocator
  • Android Geofencing API
  • Android WorkManager

Структура

lib/
├── app/                    # bootstrap, build info, error/load helpers
├── features/               # feature-level providers and logic
│   ├── api_keys/
│   ├── auth/
│   ├── groups/
│   ├── homes/
│   ├── remote/
│   ├── schedules/
│   ├── shared/
│   └── stats/
├── models/                 # typed domain models
├── providers/              # public provider barrel
├── screens/                # UI screens
├── services/               # API client, settings, credentials
└── widgets/                # reusable UI widgets

android/app/src/main/kotlin/ru/akokos/ignis_app/
├── MainActivity.kt
├── GeofenceAutomationManager.kt
├── GeofenceBroadcastReceiver.kt
├── GeofenceExitWorker.kt
└── GeofenceRestoreReceiver.kt

Запуск

flutter pub get
flutter run

Release APK

flutter build apk --release \
  --dart-define=IGNIS_BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \
  --dart-define=IGNIS_GIT_SHA="$(git rev-parse --short HEAD)"

Артефакт:

build/app/outputs/flutter-apk/app-release.apk

Проверки

flutter analyze
flutter test

Сейчас тестами прикрыты:

  • parsing и load-state основных backend-ответов;
  • сериализация HomeConfig и geofence radius;
  • синхронизация активного дома с geofence automation;
  • form logic для домов, групп и расписаний;
  • provider-мутаторы расписаний, API-ключей и group control;
  • widget-сценарии форм, GroupCard и error/retry потоков.

Настройка

  1. Добавить дом: адрес сервера Ignis и API-ключ.
  2. При необходимости задать координаты дома.
  3. Включить "выключать свет при уходе".
  4. Выдать Android-разрешения на геолокацию, включая background location.
  5. Разрешить уведомления, если нужны подтверждения о срабатывании geofence.

API-ключи хранятся отдельно от списка домов в flutter_secure_storage. Старые ключи из SharedPreferences мигрируются автоматически.

Ограничения

  • целевая платформа сейчас Android;
  • реальное поведение background execution, geofence delivery и OEM battery restrictions подтверждается в основном ручными проверками на устройстве;
  • force-stop приложения со стороны Android может ломать автоподъём фоновой логики до следующего ручного запуска.

Лицензия

Частный проект.

Description
Мобильное приложение для управления умными лампами WiZ через self-hosted сервер Ignis Core
Readme 1.5 MiB
Languages
Dart 82.1%
Kotlin 8.3%
C++ 5.8%
CMake 2.8%
Swift 0.4%
Other 0.6%