92 lines
4.3 KiB
Markdown
92 lines
4.3 KiB
Markdown
# Avtex — Smart Sleep & Motion Engine for Home Assistant
|
||
|
||
<p align="center">
|
||
<img src="app/src/main/res/drawable/app_logo.png" width="160" alt="Avtex Logo" style="border-radius: 28px;" />
|
||
</p>
|
||
|
||
<p align="center">
|
||
<b>Легковесное Android-приложение для мгновенной фиксации сна и пробуждения с интеграцией в Home Assistant (HAC)</b><br>
|
||
<i>Оптимизировано для OnePlus (OxygenOS / ColorOS) и устройств с ненормированным рабочим графиком.</i>
|
||
</p>
|
||
|
||
---
|
||
|
||
## 🌟 Ключевые возможности
|
||
|
||
* **Мгновенная фиксация пробуждения (0% расхода батареи)**:
|
||
Использует аппаратный сопроцессор `Sensor.TYPE_SIGNIFICANT_MOTION`. Как только вы берете телефон в руки после сна, сигнал пробуждения моментально передается в умный дом.
|
||
* **Детекция сна при ненормированном графике**:
|
||
Связка таймера покоя (по умолчанию 20 мин при выключенном экране) и нейросетевых классификаций **Google Play Services Sleep API** (`SleepClassifyEvent`). Никаких жестких привязок к часам (23:00–07:00).
|
||
* **Полная совместимость с Home Assistant (HAC)**:
|
||
* **Webhook URL**: отправка JSON-событий `{"event": "sleep_started" | "sleep_ended", "state": "asleep" | "awake", ...}`.
|
||
* **REST State API**: прямое обновление сенсора `binary_sensor.phone_sleep` через Long-Lived Access Token.
|
||
* **Local Broadcast Intent**: `com.example.avtex.SLEEP_STATE_CHANGED` для Tasker / Home Assistant Companion App прямо на телефоне.
|
||
* **Устойчивость к убийцам процессов OnePlus**:
|
||
* Реализован как Foreground Service с типом `specialUse`.
|
||
* Интерактивный экран со вспомогательными кнопками перехода в системные настройки OxygenOS (отключение оптимизации батареи, включение автозапуска).
|
||
* **Премиальный дизайн в стиле Cyber Obsidian / Glassmorphism**:
|
||
* Jetpack Compose & Material 3.
|
||
* Тонкие неоновые контуры, стеклянные карточки, динамический пульсирующий баннер состояния.
|
||
* Интерактивная лента аудита событий сенсоров в реальном времени.
|
||
|
||
---
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### 1. Сборка APK
|
||
|
||
Для сборки отладочной версии:
|
||
```bash
|
||
./gradlew assembleDebug
|
||
```
|
||
|
||
Для сборки оптимизированного подписанного Release APK:
|
||
```bash
|
||
./gradlew assembleRelease
|
||
```
|
||
Файл будет создан в `app/build/outputs/apk/release/app-release.apk`.
|
||
|
||
### 2. Установка через ADB
|
||
```bash
|
||
adb install -r app/build/outputs/apk/release/app-release.apk
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ Настройка Home Assistant (Пример Webhook автоматизации)
|
||
|
||
В файле `automations.yaml` или в визуальном редакторе Home Assistant:
|
||
|
||
```yaml
|
||
alias: "Avtex: Автоматизация сна и пробуждения"
|
||
trigger:
|
||
- platform: webhook
|
||
webhook_id: avtex_sleep
|
||
action:
|
||
- choose:
|
||
- conditions: "{{ trigger.json.state == 'asleep' }}"
|
||
sequence:
|
||
- service: light.turn_off
|
||
target:
|
||
entity_id: all
|
||
- service: climate.set_preset_mode
|
||
data:
|
||
preset_mode: sleep
|
||
target:
|
||
entity_id: climate.bedroom
|
||
- conditions: "{{ trigger.json.state == 'awake' }}"
|
||
sequence:
|
||
- service: scene.turn_on
|
||
target:
|
||
entity_id: scene.morning_lights
|
||
```
|
||
|
||
---
|
||
|
||
## 🛠 Стек технологий
|
||
* **Язык**: Kotlin 2.3+
|
||
* **UI**: Jetpack Compose, Material 3, Navigation
|
||
* **Сенсоры**: Android Sensor Hub (`TYPE_SIGNIFICANT_MOTION`), Google Play Services Location / Sleep API
|
||
* **Сеть**: OkHttp 4.12
|
||
* **Хранилище настроек**: Jetpack DataStore Preferences
|