Разработка мобильного приложения для управления умным домом
Рынок умного дома фрагментирован как никакой другой: Zigbee-лампа одного вендора, Z-Wave замок другого, Wi-Fi камера третьего и проприетарный термостат — в одной квартире. Мобильное приложение, которое объединяет их в единый интерфейс, — это не просто UI-задача. Это многопротокольная интеграция с асинхронным состоянием, push-уведомлениями и обязательным офлайн-фоллбэком.
Протоколы и SDK: что с чем работает
Zigbee и Z-Wave напрямую с телефона не работают — нет аппаратного модуля. Все команды идут через хаб: Philips Hue Bridge (REST API), SmartThings Hub (REST + WebSocket), Home Assistant (REST + WebSocket + MQTT). Протокол общения с хабом — ваш выбор. Home Assistant предпочтительнее с точки зрения открытости: WebSocket API с подпиской на state_changed события, Long-Lived Access Token для авторизации.
Matter — актуальный стандарт с 2022 года, поддержан Apple (HomeKit), Google (Google Home), Amazon (Alexa). SDK для Android: com.google.home:home-sdk (beta, требует Google account). Для iOS — HomeKit framework, HMHomeManager, HMAccessory. Matter работает поверх Wi-Fi и Thread, но для Thread нужен border router (Apple HomePod, Google Nest Hub).
Прямое управление через Wi-Fi — для устройств с открытым API (Shelly, Sonoff в режиме DIY, Tuya). Shelly дает локальный HTTP API и MQTT без облака — хорошо для приватности. Tuya IoT Platform SDK для Android: TuyaSmartDevice с методами publishDps() для отправки команд.
// Tuya: отправить команду включения
val dps = hashMapOf<String, Any>("1" to true)
TuyaHomeSdk.newDeviceInstance(deviceId).publishDps(
JSONObject(dps as Map<*, *>).toString(),
object : IResultCallback {
override fun onError(code: String, error: String) { /* handle */ }
override fun onSuccess() { /* update UI */ }
}
)
Bluetooth Low Energy — для ближней зоны: умные замки (August, Nuki), датчики. CoreBluetooth на iOS, Android BLE API + RxAndroidBle на Android. Нюанс: BLE-соединение нужно удерживать активным для замков, иначе задержка при открытии двери — 2–3 секунды на переподключение, что неприемлемо.
Реальный challenge: согласованность состояния
Самое сложное в приложении умного дома — показывать актуальное состояние устройств. Лампа выключена вручную с настенного выключателя? Push-уведомление через Matter subscription или MQTT должно обновить UI до следующего открытия экрана.
Архитектура для Android: ViewModel хранит StateFlow<Map<DeviceId, DeviceState>>. Подписка на события хаба — отдельный coroutineScope в Application-уровне, чтобы не привязываться к жизненному циклу экрана. При получении state_changed от Home Assistant WebSocket — обновление через MutableStateFlow.
На iOS аналогично: HomeKit даёт делегатные callbacks home(_:didUpdate:) — их нужно маршрутизировать в @Published свойства ObservableObject или через Combine pipeline.
Мёртвые события. Если хаб недоступен — приложение не должно зависнуть на последнем известном состоянии без предупреждения. Таймаут на WebSocket heartbeat: если нет pong за 30 секунд — показывать «устройство недоступно», а не стаую кнопку включения.
Автоматизация и сценарии
Пользователи ждут не просто управления кнопкой — они ждут автоматизаций. «Когда открывается дверь после 23:00 — включить свет в коридоре на 50%». Сценарии реализуются на уровне хаба (Home Assistant automations, Apple Shortcuts, Google Home routines), приложение лишь предоставляет UI для их создания.
Конструктор автоматизаций — самая трудоёмкая часть. Drag-and-drop условий и действий, выбор устройств, временные триггеры, геозоны. Готовый node-based editor реализовать сложно — проще tabbed flow «триггер → условие → действие» с ограниченной логикой.
iOS HomeKit vs Android: практический разрыв
HomeKit на iOS строже: все устройства должны пройти MFi-сертификацию или использовать Matter. Зато интеграция с Siri Shortcuts — бесплатная фича для пользователей. INIntent для включения сцен — несколько строк кода.
На Android гибче: можно работать с любым API напрямую, без сертификации. Но нет единого стандарта — у каждого вендора свой SDK.
Сроки
MVP с одним протоколом (например, Home Assistant + WebSocket): 6–8 недель. Мультипротокольное приложение с Matter, MQTT, BLE и конструктором автоматизаций: 4–6 месяцев. Стоимость зависит от числа поддерживаемых протоколов и платформ.







