Разработка мобильного приложения для умного дома (электрозамки/домофон)
Замок завис, API вернул 503, BLE-соединение не установилось — пользователь стоит у двери с мёртвым телефоном. Это не UX-проблема, это инцидент. Мы проектируем приложения для электрозамков и домофонов, где каждый канал связи имеет резерв. Наш опыт — 10+ лет и 15 проектов в сфере умного дома. Недавно мы решали проблему с замками Nuki на iOS: приложение не получало BLE-уведомления о состоянии замка из-за неправильной настройки CoreBluetooth background modes. После добавления bluetooth-central в Info.plist и использования CBCentralManagerOptionShowPowerAlertKey всё заработало. Такие детали определяют надёжность. Готовы оценить ваш проект за 2 дня: пишите, и мы предложим решение под ключ.
Как мы обеспечиваем надёжность при отказе всех каналов?
Архитектура строится на резервировании. Минимум два независимых способа открыть замок. Если основной канал упал, пользователь не должен звонить в поддержку, стоя на морозе. Типичная иерархия каналов:
- BLE (локальный, без интернета) — первый приоритет при близком расстоянии
- Wi-Fi/облако — если BLE не доступен
- PIN-код на замке — при полном отказе системы
- Механический ключ — физический fallback
Приложение автоматически определяет доступные каналы и переключается. BLE: проверяем Bluetooth state через FlutterBluePlus.adapterState. Нет BLE или устройство далеко — пробуем Wi-Fi/облако. В UI показываем активный канал пользователю. Снижаем затраты на поддержку — меньше звонков, выше удовлетворённость.
Почему BLE — основной канал для быстрого открытия?
BLE обеспечивает задержку менее 200 мс — в 10 раз быстрее облачного управления. Дальность 5–15 метров, не требует интернета. Нативная реализация через CoreBluetooth (iOS) / Android BLE API, на Flutter — flutter_blue_plus. Каждый замок — GATT-сервис со своими характеристиками. Например, August замки используют service UUID 00001523-1212-EFDE-1523-785FEABCD123 с проприетарным протоколом — официального SDK нет, работаем через реверс-инжиниринг или August API.
Протоколы и типы замков
| Протокол | Дальность | Задержка | Зависимость от интернета | Примеры замков |
|---|---|---|---|---|
| BLE | 5-15 м | <200 мс | Нет | August, Schlage Encode, Nuki |
| Wi-Fi | ~100 м | 300-2000 мс | Да | Tuya, Yale Connect, Kwikset Halo |
| Zigbee | 10-100 м | <500 мс | Через хаб | Samsung SmartThings, Kwikset |
| Z-Wave | 30-100 м | <500 мс | Через хаб | Schlage, Kwikset Z-Wave |
Для Wi-Fi замков Tuya используем Tuya Open API: POST /v1.0/devices/{deviceId}/commands с {"commands": [{"code": "switch_1", "value": true}]}. Для Zigbee — MQTT-команда на топик zigbee2mqtt/{device}/set с {"state": "UNLOCK"}. Z-Wave работает через Z-Wave JS или Home Assistant.
Сравнение подходов к временному доступу
| Подход | Скорость выдачи ключа | Безопасность | Офлайн-работа | Типичные замки |
|---|---|---|---|---|
| Облачный API (Nuki, August) | <1 с | Высокая (SSL) | Нет | Nuki, August |
| BLE-токен с подписью | <100 мс | Высокая (крипто) | Да | Любые BLE |
| PIN-код на замке | Мгновенно | Средняя | Да | С сенсорной панелью |
Временный доступ и гости
Ключ для гостя на 24 часа, для Airbnb-жильца на неделю, для домработницы по вторникам с 10 до 14 — это core функциональность. Реализация зависит от замка. Nuki Web API: POST /smartlock/{smartlockId}/auth создаёт authorization с allowedWeekDays, allowedFromDate, allowedUntilDate, allowedFromTime, allowedUntilTime. August API: POST /access_codes с access_code типом.
Для BLE-замков без облака временный ключ — криптографически подписанный токен с временными ограничениями, передаваемый по BLE. На бэкенде храним все выданные ключи с метаданными (кому, кем, срок, список использований). Push-уведомление владельцу при каждом использовании гостевого ключа.
Как реализовать видеозвонок с домофона?
Видеозвонок с домофона на мобильный = WebRTC + VoIP push. Когда кто-то нажал кнопку домофона:
- Домофон публикует событие в MQTT
- Бэкенд отправляет VoIP push на iOS (через PushKit) или FCM с
priority: highна Android - Приложение просыпается в фоне, устанавливает WebRTC соединение с домофоном
- Показывает UI входящего звонка через
CallKit(iOS) илиandroid.telecom.ConnectionService
VoIP push на iOS через PushKit — единственный способ надёжно разбудить приложение для видеозвонка. Обычный push приходит с задержкой 2–30 секунд. PushKit — мгновенно. Требует VoIP сертификат в Apple Developer Portal, entitlement com.apple.developer.pushkit.unrestricted-dispatch. На Android фоновый сервис с startForeground держит WebRTC соединение готовым. Начиная с Android 14 — ограничения на фоновые сервисы ужесточились, нужен ForegroundServiceType.CAMERA + ForegroundServiceType.MICROPHONE в манифесте.
Журнал событий
Каждое открытие — запись в журнал: кто, каким методом, в какое время. Для съёмного жилья это юридически важно. Хранение: PostgreSQL с таблицей access_log (id, lock_id, user_id, method, timestamp, result). Индекс по (lock_id, timestamp DESC). Мобильное приложение запрашивает постранично: GET /api/locks/{id}/access-log?page=1&per_page=50.
Типичные ошибки при интеграции
-
BLE не сканируется — не включен bluetooth-central background mode на iOS или не запрошен
android.permission.BLUETOOTH_SCANна Android 12+. - PushKit не приходит — сертификат VoIP не перевыпущен или не указан topic в payload.
- WebRTC не соединяется — STUN/TURN серверы не настроены или блокируются firewall.
- Временный ключ не открывает замок — не совпадает timezone на замке и бэкенде.
Что входит в разработку?
Получаете полный цикл: анализ требований и согласование протоколов, проектирование архитектуры с резервными каналами, разработка мобильного приложения (iOS/Android), интеграция с замками и домофонами через API, настройка push-уведомлений (PushKit, FCM), тестирование на реальных устройствах, подготовка документации и инструкций для пользователей. Включаем гарантийную поддержку на 3 месяца после релиза.
Сроки и стоимость
Один тип замка (BLE или Wi-Fi/облако), базовое управление, временный доступ — 6–8 недель. Мультипротокол, домофон с видео, CallKit/VoIP, журнал, уведомления — 4–6 месяцев. Стоимость рассчитывается после определения модели замков и требований к гостевому доступу. Свяжитесь с нами — получите консультацию по архитектуре и предварительную оценку. Закажите разработку под ключ — мы предложим решение за 2 дня.
Apple PushKit documentation: https://developer.apple.com/documentation/pushkit







