Разработка мобильного приложения для прачечной самообслуживания
Прачечная самообслуживания без мобильного приложения — это монеты и очередь к терминалу. С приложением: сканируешь QR на машине, выбираешь программу стирки, оплачиваешь, получаешь уведомление когда цикл закончен. Для владельца сети — удалённый мониторинг машин, статистика загрузки, управление ценами без поездки в точку.
Управление машиной: протокол связи
Стиральные машины в самообслуживании управляются через IoT-модуль, встроенный или установленный параллельно: ESP32 или Raspberry Pi с GSM/Wi-Fi. Модуль подключается к плате управления машины через реле (эмуляция кнопок) или через UART/RS485 если у машины есть сервисный интерфейс.
Большинство производителей коммерческих машин (Electrolux Professional, Miele Professional, Speed Queen) предоставляют API или хотя бы описание сервисного протокола — нужно запросить напрямую у вендора. Дешёвые машины без протокола управляются через реле: модуль видит сигнал «цикл запущен» с датчика тока (SCT-013), отправляет состояние на сервер.
Архитектура: IoT-модуль ↔ MQTT-брокер (Mosquitto/HiveMQ) ↔ бэкенд ↔ мобильное приложение через WebSocket.
// Android: подписка на статус машины через MQTT
class LaundryMachineMonitor(private val machineId: String) {
private val mqttClient: MqttAndroidClient = /* инициализация */
fun subscribeToMachine(onUpdate: (MachineStatus) -> Unit) {
mqttClient.subscribe("laundry/$machineId/status", 1) { _, message ->
val json = String(message.payload)
val status = Json.decodeFromString<MachineStatus>(json)
onUpdate(status)
}
}
fun startCycle(program: WashProgram, token: String) {
val command = Json.encodeToString(StartCycleCommand(program, token))
mqttClient.publish("laundry/$machineId/command", command.toByteArray(), 1, false)
}
}
@Serializable
data class MachineStatus(
val state: MachineState, // IDLE, RUNNING, DONE, ERROR
val programName: String?,
val remainingSeconds: Int?,
val errorCode: String?
)
Оплата и обход App Store Review
Ключевая проблема: Apple считает пополнение баланса кошелька внутри приложения «цифровым товаром» и требует IAP с комиссией 30%. Но если кошелёк используется для оплаты физических услуг (стирка — физическая услуга), можно использовать внешний эквайринг напрямую.
Схема: пополнение баланса — переход в Safari/SafariViewController на веб-страницу оплаты (ЮКасса, Stripe, CloudPayments). Оплата конкретного цикла — списание с баланса через API. Apple Guidelines 3.1.5(b) это разрешает для «реальных товаров и услуг».
На Android с Google Pay — проще: PaymentsClient с картой или интеграция в WebView.
UX: очередь и бронирование
Пользователь хочет знать, свободна ли машина до поездки в прачечную. Карта точек с индикаторами доступности машин в реальном времени — основная функция главного экрана. Фильтрация: «только со свободными машинами», «со сушильными машинами».
Бронирование машины на 10-15 минут — спорная функция. Без бронирования: пришёл, а все заняты. С бронированием: много «брошенных» резерваций. Компромисс: бронирование платное (списывается 1 условная единица), засчитывается в оплату цикла.
Push-уведомление за 5 минут до окончания цикла и по его завершении — через FCM/APNs. На стороне сервера: worker проверяет оставшееся время по данным с машины, планирует пуш через FCM Schedule (Android) или APNs с apns-expiration.
Программа лояльности
Накопительные баллы за циклы стирки — простая механика удержания. Каждый N-й цикл бесплатно. Реализация на сервере, мобильное приложение показывает прогресс через API.
Разработка мобильного приложения для сети прачечных с оплатой, управлением машинами через MQTT и уведомлениями: 8-12 недель. С картой точек, программой лояльности и CMS для управления сетью: 4-5 месяцев. Стоимость рассчитывается индивидуально.







