В теории можно, лежит у меня ещё Redmi Note 4X, можно и его под что-то простенькое, просто X1 был под рукой, а для Vosk, как ни крути, нужно довольно много памяти под полную модельку, если выбросить часть с ассистентом - то можно и на совсем старом такое завести без проблем
1. Общая архитектура
Система состоит из трёх независимых компонентов, работающих на одном устройстве (Xperia XZ1) и взаимодействующих через HTTP API:
Основной бэкенд умного дома (Central Hub) — ядро системы. Отвечает за:
Управление умными устройствами (свет, розетки, датчики и т.д.).
Хранение состояния и истории.
Предоставление API для модулей и внешних клиентов.
Логику автоматизации (правила, сценарии).
Обработку текстовых команд (от голосового ассистента или других интерфейсов).
Модуль голосового ассистента (Voice Module) — обеспечивает голосовой интерфейс:
Постоянное прослушивание микрофона, детекция ключевой фразы.
Распознавание речи (Vosk) и синтез речи (TTS).
Отправка распознанного текста в основной бэкенд.
Озвучивание ответов.
Управление аудиоресурсами через аудиоарбитр.
Модуль RKHomeHub — существующий (или новый) локальный сервер для Android-приложений:
Предоставляет API для мобильных приложений (чтение/запись локальных данных).
Работает независимо от основного бэкенда, но может интегрироваться через основной бэкенд (опционально).
Дополнительный компонент: Аудиоарбитр — встроен в Voice Module или вынесен отдельно, управляет доступом к микрофону и динамику, реализует приоритетную очередь для разных источников (Voice Module, будущие модули OpenClaw, нотифаер и т.п.).
2. Основной бэкенд умного дома (Central Hub)
2.1. Назначение
Центральный сервер, который управляет всей умной домашней инфраструктурой: устройствами, автоматизациями, сценариями. Взаимодействует с модулями и внешними клиентами (мобильные приложения, веб-интерфейс).
2.2. Функциональные требования
Управление устройствами:
Регистрация устройств (ID, тип, имя, метаданные, состояние).
Обновление состояния устройства (вручную или через датчики).
Выполнение команд над устройствами (включить/выключить, установить значение, запустить сценарий).
Поддержка разных типов устройств: свет, розетки, термостаты, датчики (температура, влажность, движение, дверь/окно), камеры, медиа-плееры.
Автоматизация и сценарии:
Создание правил "если-то" (триггеры: время, состояние устройства, событие; действия: команды устройствам, уведомления, вызов вебхуков).
Периодические задачи (cron-подобные).
Хранение и выполнение сценариев (последовательности действий).
Голосовой интерфейс (через Voice Module):
Приём текстовых команд (POST /api/voice/command).
Распознавание намерений (intent parsing) для преобразования естественного языка в команды устройствам.
Поддержка контекстных диалогов (сессий) – опционально.
Ответ в виде текста для озвучивания.
API для модулей и внешних клиентов:
REST API (JSON) для всех операций.
WebSocket для реального времени (уведомления об изменениях состояний).
Аутентификация (API-ключи или JWT) для безопасности.
Хранение данных:
SQLite (или другая встраиваемая БД) для устройств, правил, истории событий.
Конфигурация в YAML/JSON.
Логирование и мониторинг:
Запись всех команд, событий, ошибок.
Ротация логов (размер, время).
2.3. Примеры API (для спецификации)
Метод Эндпоинт Описание
POST /api/devices/register Регистрация нового устройства
GET /api/devices Список всех устройств
GET /api/devices/{id} Состояние устройства
POST /api/devices/{id}/command Отправить команду устройству
POST /api/rules Создать правило автоматизации
POST /api/voice/command Отправить текстовую команду (от ассистента)
GET /api/status Статус бэкенда
2.4. Требования к производительности
Низкое потребление RAM (< 200 МБ в простое).
Быстрый отклик на команды (< 500 мс).
Работа 24/7 без перезагрузок.
3. Модуль голосового ассистента (Voice Module)
3.1. Назначение
Обеспечивает голосовое управление умным домом через микрофон и динамик телефона.
3.2. Функциональные требования
Аудиозахват и детекция ключевой фразы:
Постоянное прослушивание микрофона.
Обнаружение ключевой фразы (например, "Окей сервер" или "Слушай") без отправки звука в сеть.
После активации — захват последующей речи до паузы (таймаут тишины) или явной команды окончания.
Распознавание речи (STT):
Локальное распознавание через Vosk (русский язык, компактная модель).
Возврат текста для отправки в основной бэкенд.
Синтез речи (TTS):
Преобразование текстового ответа от бэкенда в речь.
Использование системного TTS Android (через termux-tts-speak или нативное API).
Возможность настройки голоса, скорости, громкости.
Интеграция с основным бэкендом:
Отправка распознанного текста по HTTP в Central Hub.
Получение ответа (текст для озвучивания или команда "ничего не говорить").
Озвучивание ответа.
Аудиоарбитр (встроенный):
Управление доступом к микрофону и динамику.
Приоритетная очередь (приоритеты: 1 – системные модули, 2 – голосовой ассистент, 3 – уведомления).
Поддержка будущих модулей (OpenClaw, нотифаер и др.), которые могут запрашивать аудио через API арбитра.
При конфликте – сохранение контекста прерванного диалога (если нужно).
Управление состоянием:
Запуск и остановка по требованию (может работать постоянно).
Возможность временно отключать микрофон (например, по API).
3.3. API модуля (для внешних модулей)
Модуль предоставляет HTTP API (например, порт 8082) для других модулей:
Метод Эндпоинт Описание
POST /audio/request Запрос на захват аудио (с указанием приоритета, режима)
POST /audio/release Освобождение аудиоресурсов
POST /tts/speak Воспроизвести текст через динамик (однонаправленное уведомление)
3.4. Конфигурация
Ключевая фраза (настраивается).
Путь к модели Vosk.
URL основного бэкенда.
Параметры TTS.
Порт для API арбитра.
4. Модуль RKHomeHub
4.1. Назначение
Локальный сервер для обслуживания нескольких Android-приложений на других устройствах (например, приложение для управления умным домом, дашборд). Хранит данные, специфичные для этих приложений, и предоставляет к ним API.
4.2. Функциональные требования
Локальное хранилище данных:
Регистрация клиентов (Android-приложений) с уникальными ID.
Хранение произвольных JSON-данных для каждого клиента (ключ-значение).
Поддержка синхронизации данных между клиентами (опционально).
Автоматическая очистка устаревших данных.
API для Android-приложений:
CRUD операции над данными (чтение, запись, удаление, обновление).
Поддержка подписок на изменения (WebSocket или long polling).
Аутентификация по токену (простому, без сложной безопасности, т.к. локальная сеть).
Независимость от основного бэкенда:
Может работать без Central Hub.
При наличии Central Hub – может интегрироваться через него (например, публиковать свои данные как устройства умного дома).
Минимальное потребление ресурсов:
RAM < 50 МБ.
Хранение данных в SQLite или плоских файлах.
4.3. Пример API
Метод Эндпоинт Описание
POST /api/client/register Регистрация нового клиента
GET /api/data/{client_id}/{key} Получить значение
POST /api/data/{client_id} Сохранить/обновить значение
DELETE /api/data/{client_id}/{key} Удалить ключ
GET /api/status Статус
5. Взаимодействие между компонентами
flowchart TD
subgraph Xperia XZ1
A[Central Hub<br>умный дом]
B[Voice Module]
C[RKHomeHub]
D[Будущие модули<br>OpenClaw, Notifier]
end
subgraph Внешние устройства
E[Android-приложения]
F[Пользовательский голос]
end
F -->|голос| B
B -->|текст команды| A
A -->|текст ответа| B
B -->|озвучка| F
A <-->|опционально| C
E <-->|API| C
D <-->|аудио запросы| B
D <-->|команды/статус| A
Правила взаимодействия:
Voice Module отправляет текстовые команды в Central Hub (POST /api/voice/command).
Central Hub обрабатывает команды, управляет устройствами, возвращает ответ.
Voice Module озвучивает ответ.
RKHomeHub работает независимо, его клиенты – Android-приложения.
Будущие модули (OpenClaw, нотифаер) регистрируются в Central Hub и могут запрашивать аудио через Voice Module (через API арбитра).
6. Общие требования к реализации
Платформа:
Xperia XZ1 (Android 8+, ARM64, 4 ГБ RAM).
Root (Magisk), ACC для контроля заряда.
Termux с поддержкой termux-api, termux-tts-speak, termux-microphone-record.
Автозапуск всех трёх бэкендов при загрузке (через Termux:Boot).
Языки и технологии (на усмотрение агента):
Central Hub: предпочтительно Go (высокая производительность, малый размер).
Voice Module: Python (быстрая разработка, готовые биндинги Vosk) или Go (с обёртками).
RKHomeHub: Go (лёгкий, простой).
Коммуникация:
HTTP/JSON между компонентами (локальный порт, например 8080 для Central Hub, 8081 для Voice Module API, 8082 для RKHomeHub).
WebSocket для событий реального времени (опционально).
Конфигурация:
Единый конфигурационный файл (YAML) для всех компонентов, либо отдельные файлы.
Параметры: IP-адреса, порты, пути к моделям, URL внешних API.
Логирование:
Каждый компонент пишет логи в отдельный файл в /sdcard/logs/.
Ротация: размер 10 МБ, хранить 5 файлов.
Документация для агента:
Инструкция по сборке (если требуется компиляция).
Инструкция по развёртыванию на телефоне.
Примеры API-запросов.
7. Критерии успешной реализации
Central Hub запускается и отвечает на API-запросы. Можно зарегистрировать тестовое устройство, отправить команду, получить ответ.
Voice Module активируется по ключевой фразе, распознаёт тестовую команду ("включи свет"), отправляет в Central Hub, получает ответ и озвучивает его.
Аудиоарбитр корректно обрабатывает конфликтные запросы (например, одновременный запрос от Voice Module и симулированного модуля с более высоким приоритетом).
RKHomeHub позволяет Android-приложению (симулированному) сохранить и прочитать данные.
Все три компонента работают одновременно без взаимных блокировок и утечек памяти в течение 24 часов.
Управление через ADB/SSH возможно (логи, рестарт).
8. Дальнейшее расширение (не требуется сейчас, но для спецификации)
Добавление веб-интерфейса для управления умным домом.
Поддержка MQTT для интеграции с внешними платформами.
Графический интерфейс на телефоне (через нативное приложение) – но из-за разбитого экрана не актуально.
Локальный LLM (например, через llama.cpp) для обработки команд без интернета.
Итог для агента: Агент должен создать три независимых проекта (каждый в своей директории) с полным исходным кодом, конфигурациями, скриптами развёртывания и инструкцией. Основной бэкенд (Central Hub) и RKHomeHub – на Go, Voice Module – на Python или Go. Взаимодействие через локальный HTTP. Всё должно работать на Xperia XZ1 под управлением Termux.
В существующих сервисах был не такой обширный список эмоций, а свободное время под написание своего решения таким, каким вижу его я, было - почему бы и нет
Бумажный блокнот иногда лучше тем, что он работает без интернета :) и он - твой собственный, это просто приятно
Да, весь код полностью - вайбкодинг (использовал модель GLM-5), изначально был простенький промпт-формулировка идеи "хочу голосового ассистента на отдельном постоянно включённом телефоне", дальше уточняли технологический стек и детали архитектуры - выбирал из предложенных самой нейросетью
Полное описание архитектуры, которое было отправлено на вход кодинг-модели:
Спецификация системы: три бэкенда для Xperia XZ1
Общая архитектура
Система состоит из трёх независимых компонентов, работающих на одном устройстве (Xperia XZ1) и взаимодействующих через HTTP API:
Основной бэкенд умного дома (Central Hub) — ядро системы. Отвечает за: · Управление умными устройствами (свет, розетки, датчики и так далее). · Хранение состояния и истории. · Предоставление API для модулей и внешних клиентов. · Логику автоматизации (правила, сценарии). · Обработку текстовых команд (от голосового ассистента или других интерфейсов).
Модуль голосового ассистента (Voice Module) — обеспечивает голосовой интерфейс: · Постоянное прослушивание микрофона, детекция ключевой фразы. · Распознавание речи (Vosk) и синтез речи (TTS). · Отправка распознанного текста в основной бэкенд. · Озвучивание ответов. · Управление аудиоресурсами через аудиоарбитр.
Модуль RKHomeHub — существующий (или новый) локальный сервер для Android‑приложений: · Предоставляет API для мобильных приложений (чтение/запись локальных данных). · Работает независимо от основного бэкенда, но может интегрироваться через основной бэкенд (опционально).
Дополнительный компонент: Аудиоарбитр — встроен в Voice Module или вынесен отдельно, управляет доступом к микрофону и динамику, реализует приоритетную очередь для разных источников (Voice Module, будущие модули OpenClaw, нотифаер и тому подобное).
Основной бэкенд умного дома (Central Hub)
2.1. Назначение
Центральный сервер, который управляет всей умной домашней инфраструктурой: устройствами, автоматизациями, сценариями. Взаимодействует с модулями и внешними клиентами (мобильные приложения, веб‑интерфейс).
2.2. Функциональные требования
Управление устройствами:
· Регистрация устройств (ID, тип, имя, метаданные, состояние). · Обновление состояния устройства (вручную или через датчики). · Выполнение команд над устройствами (включить/выключить, установить значение, запустить сценарий). · Поддержка разных типов устройств: свет, розетки, термостаты, датчики (температура, влажность, движение, дверь/окно), камеры, медиа‑плееры.
Автоматизация и сценарии:
· Создание правил «если‑то» (триггеры: время, состояние устройства, событие; действия: команды устройствам, уведомления, вызов вебхуков). · Периодические задачи (cron‑подобные). · Хранение и выполнение сценариев (последовательности действий).
Голосовой интерфейс (через Voice Module):
· Приём текстовых команд (POST /api/voice/command). · Распознавание намерений (intent parsing) для преобразования естественного языка в команды устройствам. · Поддержка контекстных диалогов (сессий) — опционально. · Ответ в виде текста для озвучивания.
API для модулей и внешних клиентов:
· REST API (JSON) для всех операций. · WebSocket для реального времени (уведомления об изменениях состояний). · Аутентификация (API‑ключи или JWT) для безопасности.
Хранение данных:
· SQLite (или другая встраиваемая БД) для устройств, правил, истории событий. · Конфигурация в YAML/JSON.
Логирование и мониторинг:
· Запись всех команд, событий, ошибок. · Ротация логов (размер, время).
2.3. Примеры API (для спецификации)
Метод Эндпоинт Описание POST /api/devices/register Регистрация нового устройства GET /api/devices Список всех устройств GET /api/devices/{id} Состояние устройства POST /api/devices/{id}/command Отправить команду устройству POST /api/rules Создать правило автоматизации POST /api/voice/command Отправить текстовую команду (от ассистента) GET /api/status Статус бэкенда
2.4. Требования к производительности
· Низкое потребление RAM (< 200 МБ в простое). · Быстрый отклик на команды (< 500 мс). · Работа 24/7 без перезагрузок.
Модуль голосового ассистента (Voice Module)
3.1. Назначение
Обеспечивает голосовое управление умным домом через микрофон и динамик телефона.
3.2. Функциональные требования
Аудиозахват и детекция ключевой фразы:
· Постоянное прослушивание микрофона. · Обнаружение ключевой фразы (например, «Окей сервер» или «Слушай») без отправки звука в сеть. · После активации — захват последующей речи до паузы (таймаут тишины) или явной команды окончания.
Распознавание речи (STT):
· Локальное распознавание через Vosk (русский язык, компактная модель). · Возврат текста для отправки в основной бэкенд.
Синтез речи (TTS):
· Преобразование текстового ответа от бэкенда в речь. · Использование системного TTS Android (через termux‑tts‑speak или нативное API). · Возможность настройки голоса, скорости, громкости.
Интеграция с основным бэкендом:
· Отправка распознанного текста по HTTP в Central Hub. · Получение ответа (текст для озвучивания или команда «ничего не говорить»). · Озвучивание ответа.
Аудиоарбитр (встроенный):
· Управление доступом к микрофону и динамику. · Приоритетная очередь (приоритеты: 1 — системные модули, 2 — голосовой ассистент, 3 — уведомления). · Поддержка будущих модулей (OpenClaw, нотифаер и др.), которые могут запрашивать аудио через API арбитра. · При конфликте — сохранение контекста прерванного диалога (если нужно).
Управление состоянием:
· Запуск и остановка по требованию (может работать постоянно). · Возможность временно отключать микрофон (например, по API).
3.3. API модуля (для внешних модулей)
Модуль предоставляет HTTP API (например, порт 8082) для других модулей:
Метод Эндпоинт Описание POST /audio/request Запрос на захват аудио (с указанием приоритета, режима) POST /audio/release Освобождение аудиоресурсов POST /tts/speak Воспроизвести текст через динамик (однонаправленное уведомление)
3.4. Конфигурация
· Ключевая фраза (настраивается). · Путь к модели Vosk. · URL основного бэкенда. · Параметры TTS. · Порт для API арбитра.
Модуль RKHomeHub
4.1. Назначение
Локальный сервер для обслуживания нескольких Android‑приложений на других устройствах (например, приложение для управления умным домом, дашборд). Хранит данные, специфичные для этих приложений, и предоставляет к ним API.
4.2. Функциональные требования
Локальное хранилище данных:
· Регистрация клиентов (Android‑приложений) с уникальными ID. · Хранение произвольных JSON‑данных для каждого клиента (ключ‑значение). · Поддержка синхронизации данных между клиентами (опционально). · Автоматическая очистка устаревших данных.
API для Android‑приложений:
· CRUD операции над данными (чтение, запись, удаление, обновление). · Поддержка подписок на изменения (WebSocket или long polling). · Аутентификация по токену (простому, без сложной безопасности, так как локальная сеть).
Независимость от основного бэкенда:
· Может работать без Central Hub. · При наличии Central Hub — может интегрироваться через него (например, публиковать свои данные как устройства умного дома).
Минимальное потребление ресурсов:
· RAM < 50 МБ. · Хранение данных в SQLite или плоских файлах.
4.3. Пример API
Метод Эндпоинт Описание POST /api/client/register Регистрация нового клиента GET /api/data/{client_id}/{key} Получить значение POST /api/data/{client_id} Сохранить/обновить значение DELETE /api/data/{client_id}/{key} Удалить ключ GET /api/status Статус
Взаимодействие между компонентами
flowchart TD
subgraph Xperia XZ1
A[Central Hub<br>умный дом]
B[Voice Module]
C[RKHomeHub]
D[Будущие модули<br>OpenClaw, Notifier]
end
subgraph Внешние устройства
E[Android-приложения]
F[Пользовательский голос]
end
F -->|голос| B
B -->|текст команды| A
A -->|текст ответа| B
B -->|озвучка| F
A <-->|опционально| C
E <-->|API| C
D <-->|аудио запросы| B
D <-->|команды/статус| A
Правила взаимодействия:
· Voice Module отправляет текстовые команды в Central Hub (POST /api/voice/command). · Central Hub обрабатывает команды, управляет устройствами, возвращает ответ. · Voice Module озвучивает ответ. · RKHomeHub работает независимо, его клиенты — Android‑приложения. · Будущие модули (OpenClaw, нотифаер) регистрируются в Central Hub и могут запрашивать аудио через Voice Module (через API арбитра).
Общие требования к реализации
Платформа:
· Xperia XZ1 (Android 8+, ARM64, 4 ГБ RAM). · Root (Magisk), ACC для контроля заряда. · Termux с поддержкой termux‑api, termux‑tts‑speak, termux‑microphone‑record. · Автозапуск всех трёх бэкендов при загрузке (через Termux:Boot).
Языки и технологии (на усмотрение агента):
· Central Hub: предпочтительно Go (высокая производительность, малый размер). · Voice Module: Python (быстрая разработка, готовые биндинги Vosk) или Go (с обёртками). · RKHomeHub: Go (лёгкий, простой).
Коммуникация:
· HTTP/JSON между компонентами (локальный порт, например 8080 для Central Hub, 8081 для Voice Module API, 8082 для RKHomeHub). · WebSocket для событий реального времени (опционально).
Конфигурация:
· Единый конфигурационный файл (YAML) для всех компонентов, либо отдельные файлы. · Параметры: IP‑адреса, порты, пути к моделям, URL внешних API.
Логирование:
· Каждый компонент пишет логи в отдельный файл в /sdcard/logs/. · Ротация: размер 10 МБ, хранить 5 файлов.
Документация для агента:
· Инструкция по сборке (если требуется компиляция). · Инструкция по развёртыванию на телефоне. · Примеры API‑запросов.
Критерии успешной реализации
Central Hub запускается и отвечает на API‑запросы. Можно зарегистрировать тестовое устройство, отправить команду, получить ответ.
Voice Module активируется по ключевой фразе, распознаёт тестовую команду («включи свет»), отправляет в Central Hub, получает ответ и озвучивает его.
Аудиоарбитр корректно обрабатывает конфликтные запросы (например, одновременный запрос от Voice Module и симулированного модуля с более высоким приоритетом).
RKHomeHub позволяет Android‑приложению (симулированному) сохранить и прочитать данные.
Все три компонента работают одновременно без взаимных блокировок и утечек памяти в течение 24 часов.
Управление через ADB/SSH возможно (логи, рестарт).
Дальнейшее расширение (не требуется сейчас, но для спецификации)
· Добавление веб‑интерфейса для управления умным домом. · Поддержка MQTT для интеграции с внешними платформами. · Графический интерфейс на телефоне (через нативное приложение) — но из‑за разбитого экрана не актуально. · Локальный LLM (например, через llama.cpp) для обработки команд без интернета.
Итог для агента: Агент должен создать три независимых проекта (каждый в своей директории) с полным исходным кодом, конфигурациями, скриптами развёртывания и инструкцией. Основной бэкенд (Central Hub) и RKHomeHub — на Go, Voice Module — на Python или Go. Взаимодействие через локальный HTTP. Всё должно работать на Xperia XZ1 под управлением Termux.
Wifi есть, но по Ethernet и быстрее и удобнее, это с запасом на дальнейшие эксперименты
Vosk полная модель работает без нареканий с разговорной речью, а для того чтобы не приходилось говорить прямо в микрофон пришлось подкрутить софтверное усиление микрофона
Держать уровень заряда на 70-80%,любыми способами - это может быть root и ACC (бесплатно), либо умная розетка, либо аппаратный ограничитель вроде Chargie
Благодарю, надеюсь за недельку-полторы по вечерам допинаю проект, и мотивация писать статью вырастает)
Если он будет на зарядке 24/7, и планируется серьёзное использование - без контроля перезаряда это становится опасно, нужен root и Advanced Charging Control. Иначе через несколько месяцев можно получить себе в шкафу маленький аккуратный взрыв.
Реализую похожий проект, но более "продвинутой" версии, так что в вопросе разобрался - может быть, и статейку на хабр оформлю по результатам, посмотрим.
Чистый галлютинативный язык. Сложился естественным образом в результате эволюции человеческого невежества и симбиоза с матричным перемножением. В основе изъяснения мысли лежит неизменяемая шизотеория, на которую нанизываются ответы ChatGPT. Путём прогона через LLM каждого входящего комментария к исходной шизотеории мы сохраняем её неизменной, генерируя логично выглядящие контраргументы.
По-моему, это прекрасно. Кстати, автор уже успешно пользуется этим языком, что можно проследить по неповторимому стилю общения.
У этой модели всё довольно неплохо с охлаждением, плюс телефон висит на стене а не лежит - пока полёт нормальный, не греется
Отрепорчу через пару лет, если не забуду)
Python вполне запускается без докера в termux
Не решал :) не так часто мне приходится озвучивать цифры и аббревиатуры в диалогах с ассистентом
В любом случае, лучшего локального решения для TTS так и не нашёл
Не просто, автор даже на хабре где-то писал, что модель под андроид собирать не планирует потому что запроса на это нет и не стоит оно того
Тут вопрос не в деньгах даже, а в интересном проекте. Думаю, на этот вопрос работает правило "если надо объяснять - значит, не надо объяснять" :)
Так речь о старых моделях, которые без проблем рутируются и кастомные прошивки ставятся, а железо в них ещё очень даже ничего
В теории можно, лежит у меня ещё Redmi Note 4X, можно и его под что-то простенькое, просто X1 был под рукой, а для Vosk, как ни крути, нужно довольно много памяти под полную модельку, если выбросить часть с ассистентом - то можно и на совсем старом такое завести без проблем
Благодарю!
Скрытый текст
Живых нет( так бы и из них что-нибудь придумал
Циклами, но при значениях в рамках примерно от 60 до 90% это довольно безопасно для батареи
Не разобрался с форматированием( попробую отредактировать
С батареей, программно - magisk модуль Advanced Charging Control, останавливает зарядку по достижении X%, запускает заново по падении до Y%
В некоторых кастомных ROM есть уже встроенное, например у меня Iodé OS - там есть
Ещё можно аппаратный ограничитель заряда воткнуть между устройством и зарядкой, стоят недорого
В существующих сервисах был не такой обширный список эмоций, а свободное время под написание своего решения таким, каким вижу его я, было - почему бы и нет
Бумажный блокнот иногда лучше тем, что он работает без интернета :) и он - твой собственный, это просто приятно
Да, весь код полностью - вайбкодинг (использовал модель GLM-5), изначально был простенький промпт-формулировка идеи "хочу голосового ассистента на отдельном постоянно включённом телефоне", дальше уточняли технологический стек и детали архитектуры - выбирал из предложенных самой нейросетью
Полное описание архитектуры, которое было отправлено на вход кодинг-модели:
Спецификация системы: три бэкенда для Xperia XZ1
Общая архитектура
Система состоит из трёх независимых компонентов, работающих на одном устройстве (Xperia XZ1) и взаимодействующих через HTTP API:
Основной бэкенд умного дома (Central Hub) — ядро системы. Отвечает за: · Управление умными устройствами (свет, розетки, датчики и так далее). · Хранение состояния и истории. · Предоставление API для модулей и внешних клиентов. · Логику автоматизации (правила, сценарии). · Обработку текстовых команд (от голосового ассистента или других интерфейсов).
Модуль голосового ассистента (Voice Module) — обеспечивает голосовой интерфейс: · Постоянное прослушивание микрофона, детекция ключевой фразы. · Распознавание речи (Vosk) и синтез речи (TTS). · Отправка распознанного текста в основной бэкенд. · Озвучивание ответов. · Управление аудиоресурсами через аудиоарбитр.
Модуль RKHomeHub — существующий (или новый) локальный сервер для Android‑приложений: · Предоставляет API для мобильных приложений (чтение/запись локальных данных). · Работает независимо от основного бэкенда, но может интегрироваться через основной бэкенд (опционально).
Дополнительный компонент: Аудиоарбитр — встроен в Voice Module или вынесен отдельно, управляет доступом к микрофону и динамику, реализует приоритетную очередь для разных источников (Voice Module, будущие модули OpenClaw, нотифаер и тому подобное).
Основной бэкенд умного дома (Central Hub)
2.1. Назначение
Центральный сервер, который управляет всей умной домашней инфраструктурой: устройствами, автоматизациями, сценариями. Взаимодействует с модулями и внешними клиентами (мобильные приложения, веб‑интерфейс).
2.2. Функциональные требования
Управление устройствами:
· Регистрация устройств (ID, тип, имя, метаданные, состояние). · Обновление состояния устройства (вручную или через датчики). · Выполнение команд над устройствами (включить/выключить, установить значение, запустить сценарий). · Поддержка разных типов устройств: свет, розетки, термостаты, датчики (температура, влажность, движение, дверь/окно), камеры, медиа‑плееры.
Автоматизация и сценарии:
· Создание правил «если‑то» (триггеры: время, состояние устройства, событие; действия: команды устройствам, уведомления, вызов вебхуков). · Периодические задачи (cron‑подобные). · Хранение и выполнение сценариев (последовательности действий).
Голосовой интерфейс (через Voice Module):
· Приём текстовых команд (POST /api/voice/command). · Распознавание намерений (intent parsing) для преобразования естественного языка в команды устройствам. · Поддержка контекстных диалогов (сессий) — опционально. · Ответ в виде текста для озвучивания.
API для модулей и внешних клиентов:
· REST API (JSON) для всех операций. · WebSocket для реального времени (уведомления об изменениях состояний). · Аутентификация (API‑ключи или JWT) для безопасности.
Хранение данных:
· SQLite (или другая встраиваемая БД) для устройств, правил, истории событий. · Конфигурация в YAML/JSON.
Логирование и мониторинг:
· Запись всех команд, событий, ошибок. · Ротация логов (размер, время).
2.3. Примеры API (для спецификации)
Метод Эндпоинт Описание POST /api/devices/register Регистрация нового устройства GET /api/devices Список всех устройств GET /api/devices/{id} Состояние устройства POST /api/devices/{id}/command Отправить команду устройству POST /api/rules Создать правило автоматизации POST /api/voice/command Отправить текстовую команду (от ассистента) GET /api/status Статус бэкенда
2.4. Требования к производительности
· Низкое потребление RAM (< 200 МБ в простое). · Быстрый отклик на команды (< 500 мс). · Работа 24/7 без перезагрузок.
Модуль голосового ассистента (Voice Module)
3.1. Назначение
Обеспечивает голосовое управление умным домом через микрофон и динамик телефона.
3.2. Функциональные требования
Аудиозахват и детекция ключевой фразы:
· Постоянное прослушивание микрофона. · Обнаружение ключевой фразы (например, «Окей сервер» или «Слушай») без отправки звука в сеть. · После активации — захват последующей речи до паузы (таймаут тишины) или явной команды окончания.
Распознавание речи (STT):
· Локальное распознавание через Vosk (русский язык, компактная модель). · Возврат текста для отправки в основной бэкенд.
Синтез речи (TTS):
· Преобразование текстового ответа от бэкенда в речь. · Использование системного TTS Android (через termux‑tts‑speak или нативное API). · Возможность настройки голоса, скорости, громкости.
Интеграция с основным бэкендом:
· Отправка распознанного текста по HTTP в Central Hub. · Получение ответа (текст для озвучивания или команда «ничего не говорить»). · Озвучивание ответа.
Аудиоарбитр (встроенный):
· Управление доступом к микрофону и динамику. · Приоритетная очередь (приоритеты: 1 — системные модули, 2 — голосовой ассистент, 3 — уведомления). · Поддержка будущих модулей (OpenClaw, нотифаер и др.), которые могут запрашивать аудио через API арбитра. · При конфликте — сохранение контекста прерванного диалога (если нужно).
Управление состоянием:
· Запуск и остановка по требованию (может работать постоянно). · Возможность временно отключать микрофон (например, по API).
3.3. API модуля (для внешних модулей)
Модуль предоставляет HTTP API (например, порт 8082) для других модулей:
Метод Эндпоинт Описание POST /audio/request Запрос на захват аудио (с указанием приоритета, режима) POST /audio/release Освобождение аудиоресурсов POST /tts/speak Воспроизвести текст через динамик (однонаправленное уведомление)
3.4. Конфигурация
· Ключевая фраза (настраивается). · Путь к модели Vosk. · URL основного бэкенда. · Параметры TTS. · Порт для API арбитра.
Модуль RKHomeHub
4.1. Назначение
Локальный сервер для обслуживания нескольких Android‑приложений на других устройствах (например, приложение для управления умным домом, дашборд). Хранит данные, специфичные для этих приложений, и предоставляет к ним API.
4.2. Функциональные требования
Локальное хранилище данных:
· Регистрация клиентов (Android‑приложений) с уникальными ID. · Хранение произвольных JSON‑данных для каждого клиента (ключ‑значение). · Поддержка синхронизации данных между клиентами (опционально). · Автоматическая очистка устаревших данных.
API для Android‑приложений:
· CRUD операции над данными (чтение, запись, удаление, обновление). · Поддержка подписок на изменения (WebSocket или long polling). · Аутентификация по токену (простому, без сложной безопасности, так как локальная сеть).
Независимость от основного бэкенда:
· Может работать без Central Hub. · При наличии Central Hub — может интегрироваться через него (например, публиковать свои данные как устройства умного дома).
Минимальное потребление ресурсов:
· RAM < 50 МБ. · Хранение данных в SQLite или плоских файлах.
4.3. Пример API
Метод Эндпоинт Описание POST /api/client/register Регистрация нового клиента GET /api/data/{client_id}/{key} Получить значение POST /api/data/{client_id} Сохранить/обновить значение DELETE /api/data/{client_id}/{key} Удалить ключ GET /api/status Статус
Взаимодействие между компонентами
Правила взаимодействия:
· Voice Module отправляет текстовые команды в Central Hub (POST /api/voice/command). · Central Hub обрабатывает команды, управляет устройствами, возвращает ответ. · Voice Module озвучивает ответ. · RKHomeHub работает независимо, его клиенты — Android‑приложения. · Будущие модули (OpenClaw, нотифаер) регистрируются в Central Hub и могут запрашивать аудио через Voice Module (через API арбитра).
Общие требования к реализации
Платформа:
· Xperia XZ1 (Android 8+, ARM64, 4 ГБ RAM). · Root (Magisk), ACC для контроля заряда. · Termux с поддержкой termux‑api, termux‑tts‑speak, termux‑microphone‑record. · Автозапуск всех трёх бэкендов при загрузке (через Termux:Boot).
Языки и технологии (на усмотрение агента):
· Central Hub: предпочтительно Go (высокая производительность, малый размер). · Voice Module: Python (быстрая разработка, готовые биндинги Vosk) или Go (с обёртками). · RKHomeHub: Go (лёгкий, простой).
Коммуникация:
· HTTP/JSON между компонентами (локальный порт, например 8080 для Central Hub, 8081 для Voice Module API, 8082 для RKHomeHub). · WebSocket для событий реального времени (опционально).
Конфигурация:
· Единый конфигурационный файл (YAML) для всех компонентов, либо отдельные файлы. · Параметры: IP‑адреса, порты, пути к моделям, URL внешних API.
Логирование:
· Каждый компонент пишет логи в отдельный файл в /sdcard/logs/. · Ротация: размер 10 МБ, хранить 5 файлов.
Документация для агента:
· Инструкция по сборке (если требуется компиляция). · Инструкция по развёртыванию на телефоне. · Примеры API‑запросов.
Критерии успешной реализации
Central Hub запускается и отвечает на API‑запросы. Можно зарегистрировать тестовое устройство, отправить команду, получить ответ.
Voice Module активируется по ключевой фразе, распознаёт тестовую команду («включи свет»), отправляет в Central Hub, получает ответ и озвучивает его.
Аудиоарбитр корректно обрабатывает конфликтные запросы (например, одновременный запрос от Voice Module и симулированного модуля с более высоким приоритетом).
RKHomeHub позволяет Android‑приложению (симулированному) сохранить и прочитать данные.
Все три компонента работают одновременно без взаимных блокировок и утечек памяти в течение 24 часов.
Управление через ADB/SSH возможно (логи, рестарт).
Дальнейшее расширение (не требуется сейчас, но для спецификации)
· Добавление веб‑интерфейса для управления умным домом. · Поддержка MQTT для интеграции с внешними платформами. · Графический интерфейс на телефоне (через нативное приложение) — но из‑за разбитого экрана не актуально. · Локальный LLM (например, через llama.cpp) для обработки команд без интернета.
Итог для агента: Агент должен создать три независимых проекта (каждый в своей директории) с полным исходным кодом, конфигурациями, скриптами развёртывания и инструкцией. Основной бэкенд (Central Hub) и RKHomeHub — на Go, Voice Module — на Python или Go. Взаимодействие через локальный HTTP. Всё должно работать на Xperia XZ1 под управлением Termux.
Wifi есть, но по Ethernet и быстрее и удобнее, это с запасом на дальнейшие эксперименты
Vosk полная модель работает без нареканий с разговорной речью, а для того чтобы не приходилось говорить прямо в микрофон пришлось подкрутить софтверное усиление микрофона
Держать уровень заряда на 70-80%,любыми способами - это может быть root и ACC (бесплатно), либо умная розетка, либо аппаратный ограничитель вроде Chargie
Благодарю, надеюсь за недельку-полторы по вечерам допинаю проект, и мотивация писать статью вырастает)
Если он будет на зарядке 24/7, и планируется серьёзное использование - без контроля перезаряда это становится опасно, нужен root и Advanced Charging Control. Иначе через несколько месяцев можно получить себе в шкафу маленький аккуратный взрыв.
Реализую похожий проект, но более "продвинутой" версии, так что в вопросе разобрался - может быть, и статейку на хабр оформлю по результатам, посмотрим.
Агенты и агентессы :)
У меня есть идея получше.
Кабанский.
Чистый галлютинативный язык. Сложился естественным образом в результате эволюции человеческого невежества и симбиоза с матричным перемножением. В основе изъяснения мысли лежит неизменяемая шизотеория, на которую нанизываются ответы ChatGPT. Путём прогона через LLM каждого входящего комментария к исходной шизотеории мы сохраняем её неизменной, генерируя логично выглядящие контраргументы.
По-моему, это прекрасно. Кстати, автор уже успешно пользуется этим языком, что можно проследить по неповторимому стилю общения.
Аргументируйте, что ли.