Привет Хабр! Меня зовут Алексей и я занимаюсь беспроводными технологиями. В этой статье я расскажу, как собрал прототип своей собственной умной колонки, объединённой в одном устройстве вместе с Wi-Fi mesh-роутером. Начну издалека и поразмышляю о том, какие плюсы может принести такое устройство как для качественного Wi-Fi в квартире, так и для производителей умных колонок. Проанализирую уже существующие на рынке решения и попробую собрать собственное устройство из USB-аудиокарты, роутера и обычной Bluetooth-колонки.

Вообще идея объединить умную колонку с mesh-роутером в одно целое обжилась в моей голове достаточно давно. Пользователь расставляет в комнатах своего дома умные колонки, чтобы слушать музыку и взаимодействовать с ними голосом. Каждая колонка подключается к Wi-Fi сети и является потребителем интернета. Если дом или квартира большая, то для масштабирования Wi-Fi сети потребуются дополнительные Wi-Fi роутеры, и, вероятно, mesh-решение будет самым удачным. Но зачем держать на столе два устройства: mesh-роутер и умную колонку, когда можно объединить их в одном корпусе? Пусть умная колонка будет не только потребителем интернета, но и тем звеном, которое его раздаёт.

Польза для Wi-Fi и mesh-сетей

Прежде всего я вижу, что такое устройство принесёт пользу для создания качественной Wi-Fi сети. Из своего многолетнего опыта я знаю, что часто проблема с интернетом в квартире связана именно с неудачным расположением роутера. Много раз я видел, как пользователи прячут роутер в шкаф с зеркальными дверцами, а потом удивляются, что в квартире плохой интернет. Они покупают более дорогой тарифный план у провайдера с большей скоростью, которая по сути им не нужна, удивляются, что ничего хорошего из этого не вышло. Затем покупают дополнительный mesh-роутер и прячут его за холодильник, и после этого начинают говорить, что все эти mesh-системы — полная ерунда.

Представьте, как было бы здорово, если бы mesh-роутер мог голосом сказать пользователю, что он не видит сигнал от своего соседа, и попросил бы его придвинуть его поближе. Или сообщил об ошибке на порту, или помог в управлении роутером и диагностике. Такой встроенный в роутер помощник мог бы быть полезен и провайдеру, так как значительно бы снизил количество обращений в службу поддержки.

Итак, чем может быть полезен голосовой Wi-Fi mesh-роутер:

  • Помощь в расстановке роутеров на оптимальной дистанции друг от друга

  • Замер скорости по голосовой команде «Спок, измеряй скорость интернета»

  • Диагностика состояния роутера

  • Диагностика ошибок на порту

  • Рекомендация расширить mesh-сеть, добавив новое устройство

  • Информирование о возможных сетевых проблемах ещё до того, как они наступят

  • Самое главное преимущество, но достаточно сложно реализуемое — это создание из массива роутеров-колонок сети Wi-Fi сенсинга для безопасности, мониторинга здоровья и т.д.

Польза для производителей умных колонок

Я не понимаю, почему такую идею до сих пор не реализовали производители умных колонок, тех же Яндекс Станций, ВК Капсул и Сбер бумов, ведь экономическая выгода в этом решении находится в их руках. Умная колонка и mesh-роутер в одном корпусе — это уникальное торговое предложение и решающий фактор при выборе умной колонки, особенно при покупке нескольких колонок для каждой комнаты.

Согласитесь, что в большинстве случаев умная колонка — это просто баловство: можно купить одну, вдохновившись интересом и рекламой. Но покупать в каждую комнату такое устройство, тем более если ты не управляешь умным домом, кажется расточительным. Решение, которое позволяет за один раз купить два устройства и решить проблему с покрытием Wi-Fi в квартире, кажется более конкурентным.

Но для производителей умных колонок даже это не является главным. Очевидно, что их рост в сторону управления умными устройствами и массового рынка будет базироваться на Wi-Fi лампочках, розетках и т.д., то есть именно на беспроводных вещах, которым нужен качественный доступ в интернет. А если его нет, то кто виноват? Правильно — само устройство. То, что умная розетка находится за холодильником, где Wi-Fi не ловит, ни кого не интересует. Плохое именно устройство.

Здесь опят�� же хорошо было бы, когда умная колонка как элемент умного дома сама понимает состояние беспроводной сети и статусы всех подключённых устройств. Она может сообщить, что подключение к какому-то устройству нестабильно, и выдать рекомендации по устранению данной проблемы.

Наконец, самая главная киллер-фича: умная колонка и роутер в одном корпусе могут позволить умной колонке идентифицировать пользователей. На основании регистрации в сети смартфонов пользователей можно понять, кто сейчас находится в доме, в какой комнате, и осуществлять персонализированное общение. Это достаточно простой кейс, который будет обладать вау-эффектом. Представьте: вы заходите в комнату, и умная колонка здоровается с вами или включает подкаст в соответствии с вашими предпочтениями.

Сразу приходит в голову огромное количество потенциальных сценариев. Например, "Мистер, Спок напомните Алексею вынести мусор и сделать уроки когда они придет домой" (Да, да я в том числе и фанат Стар трека :-)

Обзор существующих решений

Если описываемый концепт настолько удачный — и это не моя галлюцинация — то логично, что такие решения уже должны быть на рынке. И действительно, они уже есть.

NETGEAR Orbi Voice RBK50V — это гибридное устройство, сочетающее в себе функции умной акустической системы с голосовым управлением Alexa и высокоскоростного беспроводного Mesh-маршрутизатора с поддержкой Wi-Fi стандарта AC2200. Оно предназначено для организации надёжной сети с расширением покрытия сигнала Wi-Fi в больших помещениях или сложных условиях приёма сигнала, обеспечивая стабильное подключение устройств даже в удалённых уголках дома или офиса.

Фрагмент из официального datasheet устройства
Фрагмент из официального datasheet устройства

Функционал умной колонки:

  • Голосовое управление: поддержка виртуального ассистента Amazon Alexa позволяет управлять устройством голосом, запрашивать информацию, воспроизводить музыку, контролировать освещение и другие совместимые устройства умного дома.

  • Интеграция с музыкальными сервисами: поддерживает потоковую передачу музыки с популярных сервисов, таких как Spotify, Pandora, iHeartRadio и других.

  • Высокая звуковая производительность: встроенный динамик обеспечивает качественный звук для прослушивания музыки и воспроизведения уведомлений и сообщений.

Это, вероятно, самый близкий аналог к нашему концепту, но стандарт AC в 2026 году уже является устаревшим. Хотя для устройства родом с 2018 года это было более чем продвинутое решение. На мой взгляд, это устройство опередило время.

Google Nest Wifi Pro — это современная серия устройств от Google, сочетающая функции высокопроизводительного Mesh-роутера и умной домашней точки доступа. Это новое поколение решений для построения домашних сетей с поддержкой новейших стандартов связи и удобством интеграции с экосистемой Google Home. Это не совсем аналог нашего концепта. Устройство не имеет полноценной аудиосистемы и не может проигрывать музыку, но может взаимодействовать с пользователем через голосового ассистента.

Google Nest Wifi Pro - фото из официального блога (https://blog.google/products-and-platforms/devices/google-nest/google-nest-wifi-pro-6e/)
Google Nest Wifi Pro - фото из официального блога (https://blog.google/products-and-platforms/devices/google-nest/google-nest-wifi-pro-6e/)
  • Управление осуществляется через простое приложение Google Home, доступное на смартфонах Android и iOS.

  • Голосовые команды с использованием помощника Google Assistant позволяют легко настраивать и администрировать систему.

  • Устройство интегрируется с различными аксессуарами и системами умного дома, позволяя создавать автоматизацию процессов.

ASUS Lyra Voice — это комбинированное устройство, сочетающее в себе функциональность умной колонки с голосовым помощником Alexa и беспроводного Mesh-роутера. Основная цель устройства — предоставление быстрого и надёжного Wi-Fi покрытия наряду с возможностью голосового управления бытовыми приборами и функциями умного дома.

ASUS Lyra Voice изображение с официального сайта (https://dlcdnimgs.asus.com/websites/global/products/C11MOc1tCEDKR7Dp/img/main/lyra_favorite.jpg)
ASUS Lyra Voice изображение с официального сайта (https://dlcdnimgs.asus.com/websites/global/products/C11MOc1tCEDKR7Dp/img/main/lyra_favorite.jpg)
  • Поддержка голосового помощника Alexa, интегрированного непосредственно в устройство, позволяет владельцу получать необходимую информацию и управлять подключёнными гаджетами с помощью голоса.

  • Широкий спектр возможностей голосового взаимодействия включает контроль над воспроизведением музыки, получение новостей, установку будильников, регулировку освещения и многое другое.

  • Обеспечивает полное покрытие сигналом Wi-Fi даже в крупных квартирах и домах, улучшая связь и уменьшая количество мёртвых зон.

  • Может использоваться автономно или в качестве части Mesh-системы совместно с другими моделями серии Lyra для дальнейшего увеличения зоны покрытия.

  • Полностью соответствует стандартам современного Wi-Fi (AC1300), обеспечивая хорошую пропускную способность и устойчивость сети.

На мой взгляд, это самое близкое решение к тому, что я хочу попробовать собрать.

Что хочу получить в итоге

Итак, на основании первоначальных идей и существующих решений можно попробовать описать, что же я хочу получить в итоге:

  1. Умная колонка и mesh-роутер в одном устройстве

  2. Управление голосом Wi-Fi роутером и параметрами сети

  3. Качественный звук, воспроизведение музыки, подкастов и т.д.

  4. Работа с механиками по расписанию — например, музыкальный будильник или подкаст

  5. Работа с механиками по наступлению события — оповещение пользователя о сетевых событиях

  6. Идентификация пользователя и персонализированное взаимодействие

  7. Проигрывание звука и использование микрофонов обычных Bluetooth-колонок — это позволит сделать интеграцию и расширение очень простым и дешёвым

Аппаратная база

Теперь для реализации поставленных задач нужно прежде всего определиться с аппаратной базой и понять, как мы будем реализовывать на роутере поддержку звука. С одной стороны, на рынке существуют роутеры с поддержкой звука на борту либо с потенциальной возможностью расширения. Но всё же это достаточно редкие устройства. Для своего решения я решил воспользоваться внешней USB-аудиокартой. Также для подключения Bluetooth-устройства нам потребуется внешний Bluetooth-адаптер, какая-нибудь колонка и USB-хаб.

Проведя ревизию оборудования, которое у меня было дома, я собрал следующий аппаратный комплект:

  • Wi-Fi роутер — TP-Link Archer C7 — довольно старенький роутер, но имеет на борту USB-порт и позволит проверить, как вся моя поделка будет работать на слабом железе. Вообще, для прототипа концепта это самое оно.

  • USB-хаб — самый обычный, ничего примечательного

  • Bluetooth-адаптер — также самый обычный

  • Звуковая карта — получилось не совсем обычная. Я понимаю, что вполне можно было бы разыскать какой-то компактный вариант, но поскольку у меня уже была звуковая карта в виде небольшого любительского микшера, я решил использовать её. К ней я подключил проводные наушники, чтобы раньше времени не пугать окружающих своими экспериментами.

  • USB-накопитель на 32 гигабайта — понадобился мне, чтобы расширить файловую систему роутера

  • Bluetooth-колонка — для воспроизведения звука с роутера через Bluetooth

Подготовка роутера

Естественно, для экспериментов мне потребуется роутер с кастомизированной прошивкой. Для своих экспериментов я выбрал прошивку Ternex. Эта прошивка собрана на основе OpenWRT, но имеет несколько важных преимуществ для реализации моей задачи:

  1. Прошивка ориентирована на создание mesh-сетей — то, что для нас как раз и требуется

  2. В прошивке реализован достаточно продвинутый API для управления роутером и получения различных данных о его состоянии. Таким образом, нам потребуется просто распознавать голос и на основании результата отправлять API-запрос для управления роутером.

  3. Как выяснилось, прошивка имеет ещё несколько плюсов, которые пригодились в работе.

С прошивкой роутера не возникло никаких проблем. На роутере уже было установлено OpenWRT, поэтому мне осталось только скопировать на роутер sysupgrade-образ с Ternex и выполнить команду sysupgrade. Сразу после этого я в пылу азарта начал устанавливать на роутер необходимые пакеты и сразу же был возвращен на землю сообщением о недостаточном месте.

Собственно, я изначально предполагал, что места мне не хватит, и потребуется перенести файловую систему с роутера на USB-накопитель. Делается это не слишком сложно, но благодаря выбранной прошивке это можно сделать ещё проще. Нужно просто отформатировать флешку в ext4, вставить её в роутер и нажать в интерфейсе кнопку переноса файловой системы на роутер. Через пару минут ожидания и перезагрузки роутера я стал счастливым обладателем почти 32 гигабайт свободного места на роутере.

Поднимаем на роутере звук

Для начала установим на роутер необходимые пакеты:

opkg update
opkg install kmod-sound-core kmod-usb-audio madplay alsa-utils

Что устанавливается:

  • kmod-sound-core — модули ядра для звуковой поддержки

  • kmod-usb-audio — драйверы для USB-аудиокарт

  • madplay — декодер и плеер MP3-файлов

  • alsa-utils — утилиты для управления звуком (опционально, но полезно)

Теперь давайте попробуем обнаружить звуковую карту и выполним её инициализацию:

cat /proc/asound/cards

Мне повезло с первого раза. И теперь можно инициализировать звуковую карту выполнив alsactl init

На всякий случай убедимся, что звук не отключен, и проверим уровень громкости:

amixer sset Master unmute
amixer get Master

Отлично! Теперь у нас всё готово, чтобы проигрывать на роутере звук. Я скопировал на роутер одну легендарную песню и запустил её с помощью madplay. Отличное звучание. Я послушал в наушниках, а затем не поленился принести внешние колонки и послушал ещё раз.

Осознание результата

Важно отметить, что уже на этом этапе мы можем реализовать кучу интересных фич в самом примитивном варианте:

  1. Записать несколько звуковых файлов, рассказывающих о событиях в сети, и просто проигрывать их при наступлении события. Например, при подключении к Wi-Fi нового пользователя, приветствие при подключении старого, замер скорости и информирование о скорости и состоянии канала и т.д.

  2. Проигрывать звуковые файлы, запланированные через cron. Например, установив будильник, который проиграет любимую песню или запустит любимый подкаст. Достаточно легко реализовать такой функционал через веб-интерфейс.

  3. Кстати, уже сейчас мы можем проигрывать потоковое аудио с внешних источников.

Получение и запись звука с микрофона

Но хотя всё это и очень круто, наша цель — голосовое управление. Поэтому давайте попробуем получить звук с микрофона и записать его в отдельный файл. Следующая команда позволяет сначала записать короткий пяти секундный трек, а потом проигрывает его:

arecord -d 5 -f cd test.wav && aplay test.wav

Важно отметить, что воспроизведение и запись звука в среднем утилизируют всего 4% ресурсов процессора. Честно говоря, ожидал, что будет больше.

Собственно, этот пяти-секундный ролик можно передать в какой-нибудь сервис распознавания речи и уже в каком-то виде реализовать управление. Но мы всё же попробуем передавать напрямую поток и отсекать тишину. Но прежде давайте попробуем совершить всё то же самое, но для Bluetooth-колонки.

Подсоединяем Bluetooth

Почему Bluetooth важен? Это потенциально открывает возможность создания недорогих решений, когда к роутеру просто подключается пара колонок, реализуя правый и левый каналы передачи звука. Либо роутер со встроенной колонкой можно расширить ещё одной Bluetooth-колонкой для размещения в другой комнате или для дополнения, чтобы получить стерео-канал.

Итак, давайте поставим необходимые пакеты:

bashopkg update
opkg install kmod-bluetooth bluez-libs bluez-utils bluez-daemon kmod-usb-core kmod-usb-uhci kmod-usb2 usbutils dbus pulseaudio pulseaudio-module-bluetooth

Главное здесь — PulseAudio и BlueZ.

Что такое PulseAudio?

PulseAudio — это звуковой сервер, прослойка между приложениями и реальным аудиодрайвером (обычно ALSA). Он принимает аудиопотоки от программ и распределяет их по доступным устройствам вывода/ввода.

Основные функции PulseAudio:

  • Позволяет нескольким приложениям одновременно использовать одну звуковую карту (софт-микшер, «многоклиентский» доступ).

  • Управляет маршрутизацией звука: можно перенаправлять поток на разные устройства (USB-звук, HDMI, Bluetooth-колонка, сеть и т.п.).

  • Позволяет отдельно регулировать громкость для каждого приложения.

  • Умеет передавать звук по сети (например, проигрывать на другом хосте).

  • Имеет модульную архитектуру: модули для Bluetooth, сети, записи в файл, «нулевой» sink и т.д.

Что такое BlueZ?

BlueZ — это стек Bluetooth для Linux, то есть набор драйверов ядра и пользовательских демонов/утилит, реализующий протоколы Bluetooth.

Основные задачи BlueZ:

  • Управление Bluetooth-адаптером (включение/выключение, режимы, сканирование).

  • Паринг и управление устройствами (наушники, колонки, телефоны, клавиатуры и т.п.).

  • Поддержка профилей Bluetooth, в том числе аудио (A2DP, HSP/HFP и др.), через которые и ходит звук.

BlueZ сам по себе не воспроизводит звук. Он:

  • Даёт доступ к Bluetooth-аудиоустройству (например, A2DP-гарнитуре).

  • Предоставляет интерфейс, через который PulseAudio (или другой звуковой сервер) создаёт аудиосоединение с Bluetooth-устройством и дальше уже передаёт PCM-поток.

Теперь заэнейблим и запустим следующие сервисы:

/etc/init.d/dbus enable
/etc/init.d/dbus start
/etc/init.d/bluetoothd enable
/etc/init.d/bluetoothd start

Проверим, появился ли Bluetooth выполнив hciconfig и bluetoothctl list

Bluetooth появился. Теперь нужно его поднять :) hciconfig hci0 up

Дальне��шую настройку можно делать в интерактивном режиме через bluetoothctl.

Включим всё, что необходимо:

Теперь ненадолго оставим Bluetooth и перейдём к PulseAudio.

Запустим его:

/etc/init.d/pulseaudio enable
/etc/init.d/pulseaudio start

И добавим необходимые модули, отредактировав файл /etc/pulse/system.pa

load-module module-bluetooth-discover
load-module module-bluetooth-policy
load-module module-bluez5-discover

Теперь перезагрузим pulseaudio и затем инициализируем ALSA:

/etc/init.d/pulseaudio restart
alsactl init

Я в этом месте затупил. Так как звуковая карта сама имела поддержку Bluetooth, я, чтобы не запутаться, вытащил её из USB, и pulseaudio у меня не запустился. Когда я вернул звуковую карту на место, всё заработало.

Теперь можно подключать наше Bluetooth-устройство. Опять же через интерактивное меню bluetoothctl это делается достаточно легко. Включаем, сканируем и подключаемся к нужному устройству. Я эту часть делал уже поздно ночью, поэтому подключился к беспроводным наушникам, чтобы никого не разбудить. Но на следующий день повторил опыт с колонкой.

Собственно, после подключения звук сразу начинает идти через Bluetooth-устройство, хотя в некоторых гайдах говорилось, что возможно потребуется указать адрес.

Переходим к распознаванию речи

К этому моменту я поймал кураж и, окрылённый тем, что на роутере у меня много места, взгромоздил туда Python вместе с python-audio. Первым делом я написал несложный скриптик, который слушает микрофон и начинает запись только после детекции звука, заканчивая, когда наступает двух-секундная пауза.

Дальше нужно было определиться с распознаванием речи. Конечно, можно было бы передавать всё это на какой-то сторонний сервис, но я справедливо рассудил, что это будет не совсем удобно и достаточно затратно. Поэтому решено было собрать что-то своё. Ранее я имел дело с Vosk и решил пойти по проторенному пути. Чисто теоретически Vosk можно собрать и под OpenWRT, но я решил не тратить на это время и просто поднял его на локальной машине в домашней сети. Да и честно говоря, были сомнения, что ресурсов Archera хватит.

Передавать кусочки файлов было неудобно, поэтому следующим шагом я немного модифицировал свой скриптик и научил его передавать аудио-поток на Vosk-сервер.

Дальнейшее — дело техники. Роутер детектирует звук, направляет поток на Vosk-сервер. Он распознаёт текст и ищет наиболее похожую подстроку (эту часть можно улучшить с помощью ИИ). Далее, в зависимости от распознавания, с той же машины направляет API-запрос на роутер и реализует управление и запуск звука. Генерацию звука пока не делаю; если нужно ответить голосом, просто заготовил несколько шаблонных фраз. Для прототипа этого достаточно. В принципе все это понятная рутинная, работа поэтому фрагменты кода не привожу. Но если вам интересно, как я работал со звуковым потоком и распознавал его, напишите в комментариях, и я напишу об этом в следующей части.

На текущий момент у меня реализованы следующие механики:

  • Мистер Спок, сколько человек в доме — определяем на основе MAC-адресов

  • Мистер Спок, запиши голосовую заметку — просто пишем звук и сохраняем в файл, сделал заготовку на будущее

  • Мистер Спок, выключи Wi-Fi — когда соберу второе устройство, нужно будет отключать только пользовательские сети и оставить служебный mesh

  • Мистер Спок, включи подкаст [название подкаста] — просто запускается подкаст по ссылке

Если вам интересно, я с удовольствием продолжу писать на эту тему и делиться дальше своими успехами. В планах подключить какой-нибудь ИИ сервис для обработки вопросов и сервис для генерации аудио ответов. Я буду очень благодарен, если вы подскажете ещё какие-то механики или кейсы использования решения в такой компоновке и пройдете опрос.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
По вашему, мнение объединение умной колонки и Wi-Fi mesh роутера:
53.52%Будет крайне полезно и позволит сэкономить деньги на покупке разных устройств38
43.66%Открывает перспективы по идентификации пользователей и созданию персонализированных сценариев общения и умного дома31
21.13%Позволить сделать процесс настройки Wi-Fi более понятным15
36.62%Вряд ли будет полезно и кого-то заинтересует26
Проголосовал 71 пользователь. Воздержались 7 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какой форм-фактор будет более востребованным
16.36%Роутер и умная колонка в одном корпусе9
50.91%Умный роутер без колонки в корпусе, но с возможностью подключить bluetooth колонки28
32.73%Гибридный вариант — роутер с умной колонкой в одном корпусе но есть возможность подключить еще и bluetooth колонку18
Проголосовали 55 пользователей. Воздержались 11 пользователей.