Авторизация
Регистрация

Напомнить пароль

Voice Home Assistant Preview Edition. Фирменная умная колонка на базе ESP32

Фирменная, опенсорсная(прошивка на базе ESPhome) умная колонка за авторством разработчиков Home assistant. О железке узнал совершенно случайно и не то чтобы я был фанатом голосового управления, но руки сразу зачесались купить и поиграть. Подробности под катом

В чём собственно прикол железки. Голосовое управление к HA прикрутили уже достаточно давно, можно с ним разговаривать через телефон, можно через смарт часы. Но вот именно «железной» колонки не было и не было доноров, которые можно было бы перепрошить(либо никто так и не заморочился). Народ городил различного рода самопалы, довольно популярным вариантом был модуль M5 Atom Echo, но работало это всё так себе. Ну и в отличие от — в этой колонке заявлен сдвоенный микрофон и качественный шумодав(забегая вперёд — действительно классно работает, на голову лучше альтернатив). Ну а ещё она стильная и с прикольным управлением. Цена за эту радость, впрочем, немалая. Как обычно, ничего нового.
Игрушка приходит в фирменной коробке из переработанного эко-картония.
Внутри кроме самой колонки нет ничего интересного, только странная наклейка и стопка макулатуры
Колонка питается через USB-C, имеет mini jack 3.5 выход на внешние динамики. Сбоку есть тумблер выключения, а снизу — отгибающийся кусок пластика, открывающий доступ к некоему Grove Port — куда можно подключать ряд датчиков платформы M5 Stack:
  • M5Stack SHT40-BMP280 temperature, humidity, air pressure sensor
  • M5Stack PIR motion sensor
  • M5Stack SGP30 TVOC, eCO2 gas sensor
  • M5Stack BH1750 ambient light sensor
Как я понял — там внутри обычный I2C, т.е. по факту с учётом открытой прошивки можно приколхозить что угодно, имеющее I2C интерфейс. Не очень понимаю зачем, но можно) Указанные датчики должны работать из коробки.
Колонка подключается очень просто. Включаем колонку(диодное кольцо на ней начинает мерцать бело-розовым), открываем на телефоне фирменное приложение HA, Настройки -> Устройства и службы. Вверху списка будет найденная по Bluetooth колонка с предложением её добавить.
Жмём, вбиваем Wifi креды, колонка подключается, обновляет прошивку(если есть обновления) и предлагает её донастроить. В теории, дальше всё должно произойти также (next-next-next-готово), но у меня всё пошло немного не по плану и из вариантов мне был предложен только облачный сервис, что разумеется не наш путь.
Подозреваю, связано с тем что у меня Core инсталляция HA, которая не поддерживает дополнения, в случае с установкой в виде докер образа либо через HA OS всё должно быть гораздо проще.
Затаскиваем контейнеры с whisper и piper в HA Core
Собственно, нам нужно накатить docker и docker-compose
На примере того же Debian
sudo apt update
sudo apt install docker docker-compose
Дальше создаём папочки например в /opt
sudo mkdir -p /opt/whisper_piper/piper-data
sudo mkdir -p /opt/whisper_piper/whisper-data
cd /opt/whisper_piper
И в папочку whisper_piper подкидываем docker-compose.yaml такого содержимого
version: '3.4'
services:
  whisper:
    container_name: whisper
    security_opt:
      - apparmor=unconfined
    image: rhasspy/wyoming-whisper:latest
    command: --model tiny-int8 --language ru
    volumes:
      - /opt/whisper_piper/whisper-data:/data
    environment:
      - TZ=Europe/Moscow
    restart: unless-stopped
    ports:
      - 10300:10300
  piper:
    container_name: piper
    security_opt:
      - apparmor=unconfined
    image: rhasspy/wyoming-piper:latest
    command: --voice ru_RU-ruslan-medium
    volumes:
      - /opt/whisper_piper/piper-data:/data
    environment:
      - TZ=Europe/Moscow
    restart: unless-stopped
    ports:
      - 10200:10200
Тут можно заметить, что прописана языковая модель --model tiny-int8 --language ru
Модель специально заточена под очень слабое железо типа одноплатников(и в целом неплохо на них шевелится). Если развёртывание происходит на взрослом железе — есть и другие варианты моделей
Вместо ru_RU-ruslan-medium можно прописать ru_RU-dmitri-medium, ru_RU-irina-medium или ru_RU-denis-medium
Но как по мне, руслан — самый адекватный голос)
Послушать семплы можно тут
Также вместо собственного контейнера можно генерить голос через Google Translate, тогда из docker-compose.yaml можно выпилить всё, что касается контейнера piper. Останется так
version: '3.4'
services:
  whisper:
    container_name: whisper
    security_opt:
      - apparmor=unconfined
    image: rhasspy/wyoming-whisper:latest
    command: --model tiny-int8 --language ru
    volumes:
      - /opt/whisper_piper/whisper-data:/data
    environment:
      - TZ=Europe/Moscow
    restart: unless-stopped
    ports:
      - 10300:10300
Проверяем, что всё работает(в случае, если операционка не debian stable, а что-то посвежее, там будет уже не docker-compose а docker compose)
sudo docker-compose up
Если всё работает, можно сделать из этого systemd сервис
[Unit]
Description=Whisper and piper services
Requires=docker.service
After=docker.service

[Service]
Restart=always

WorkingDirectory=/opt/whisper_piper

# Remove old containers, network and volumes
ExecStartPre=/usr/bin/docker-compose -f /opt/whisper_piper/docker-compose.yaml down -v

# Compose up
ExecStart=/usr/bin/docker-compose -f /opt/whisper_piper/docker-compose.yaml up

# Compose down, remove containers
ExecStop=/usr/bin/docker-compose -f /opt/whisper_piper/docker-compose.yaml down

[Install]
WantedBy=multi-user.target
Ну и после всех этих приседаний идём в настройки HA -> устройства и службы, добавляем интеграцию Wyoming Protocol два раза, первый раз прописывая порт 10300, а второй раз соотв. 10200. Кто из сервисов whisper, а кто piper софтина поймёт автоматом.
Ну и дальше создаём нового голосового ассистента и прописываем в нём всё, что подняли

Так или иначе донастраиваем колонку с голосовым ассистентом. Работает желелезка при этом достаточно хитро. Внутри самой колонки крутится маленькая языковая модель, настроенная на распознавании одной из стартовых фраз. Основано на проекте Micro wake word
С завода в колонку пролиты три модели — с фразами Okay Nabu, Hey Jarvis и Hey Mycroft. Нужная выбирается из интерфеса
Но т.к. прошивка открытая, ничто не мешает её пересобрать, добавив что-то, натренированное другими людьми(это форк оригинальной репы с моделями если что) или даже натренировать свою. Безграничный простор для пердолинга, всё как мы любим)
Работает эта система прям отлично, идеального английского произношения не требует, можно спикать фром йор харт с диким русским акцентом — и всё будет ОК, слышит прекрасно, причём с нескольких метров.
Дальше, как только встроенная модель срабатывает — колонка становится тупой проксёй и стримит аудиопоток на сервер, где и происходит преобразование речи в текст(whisper), обработка команд(home assistant) и преобразование ответа в голос(piper). Здесь и далее контейнеры с whisper и piper крутятся на Orange Pi Zero 3, рядом с самим HA и ещё несколькими сервисами. Можно оценить быстродействие.
Команда на включение таймера работает околоидеально.

Для тех, кто не смог обойти блокировку ютьюба
На видео я такой произношу «Окай Набу, включи таймер на 15 секунд», а оно берёт и включает, красиво мигая огонёчками

Заткнуть сигнал можно либо нажатием кнопки на корпусе, либо повторным произнесением стартовой фразы(что с точки зрения внутренней логики действия полностью аналогичные)
С другими действиями… сложнее. В теории, можно включать\выключать любые устройства в HA, по совпадению по полному наименованию, по типу устройства, по пространству и т.п. На английском всё довольно неплохо, но к сожалению русская языковая модель на текущий момент достаточно бедна и не совсем понимает, что такое эти ваши падежи и склонения. Поэтому рассчитывать можно только на полное совпадение. Проще всего произнести несколько раз некую команду, в отладке языковой модели посмотреть, что же оно такое нараспознавало и добавить несколько синонимов к нужному устройству. Например как-то так)))
С музыкой тоже не всё гладко. Во первых, сама по себе колонка звучит достаточно паршиво, на mp3 320 отчётливо слышны хрипы на высоких и почти полное отсутствие низких частот.
Если понизить громкость — становится получше, но такое, громкости там и так немного
(кстати, регулировка громкости выполнена суперски — слизана со старых айподов, да ещё и со светодиодной индикацией. Очень стильно и приятно)
Впрочем, никто не мешает подключить колонку к нормальным стерео динамикам через миниджек и получить вполне пристойный звук.

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

Во вторых — HA в принципе не особо заточен как провайдер музыки. Обходится скриптами.
Сама колонка пробрасывается в HA как универсальный медиаплеер, который может воспроизвести любой звук из любого источника. Создаём скрипт, который реализует эту команду
Аналогично навешиваем ему синонимы
И вуаля — оно делает вид, что умное и работает)))

Для тех, кто не смог обойти блокировку ютьюба
На видео я произношу «Окай Набу, включить музыку», а оно берёт и включает заранее настроенный скрипт с синонимом «Музыку», который запускает проигрывание интернет радио.

Ну и так в целом со всеми «навыками». Есть куча заранее созданных блюпринтов, но они все заточены под английский, беглым поиском я под великомугучий ничего не нашёл. Приходится костылить врукопашку.

Выводы. Для людей, которые избегают завязываться на облачные сервисы(а те, кто не избегал, сейчас сильно-сильно страдают в связи с деятельностью ГРЧЦ) — штука почти безальтернативная. Да, можно сделать самопал, но качество и стабильность его работы будет под большим вопросом. Лично у меня оно срабатывало со второго раза на третий, здесь же, если модель на этом слове училась — почти 100% успеха. Если нет — всё уже хуже, но как минимум whisper в принципе перестал выдавать результат обработки «громкая музыка»(это он так тонко намекает, что ничего не расслышал). Шумодав и нормальные микрофоны решают. В остальном же штука не для всех, большинство граждан предпочтут купить колонку с какой-нибудь алисой и не морочиться, и я их прекрасно понимаю. Но в моём доме алис, алекс и прочих сири никогда не будет, поэтому лично я с удовольствием повозился(хоть и не уверен, что буду реально пользоваться).
Ну и следует так же понимать, что Preview Edition в названии фигурирует не просто так — по сути сейчас в продаже бета версия железки, которая может кардинально поменяться или вообще исчезнуть из продажи, если не взлетит. В общем — штука всё ещё для энтузиастов и любителей повозиться, хоть и сделал огромный шаг в сторону простоты и дружелюбности настройки. Спасибо за внимание!
Планирую купить +14 Добавить в избранное
+37 +46
свернутьразвернуть
Комментарии (22)
RSS
+
avatar
0
Цена: 5417 в каких бумажках? или листьях?
+
avatar
0
В дефолтных безусловных единицах.
+
avatar
0
  • NikoM
  • 09 мая 2025, 11:00
В гривнах? Тенге?
+
avatar
+6
Казалось, очевидно что не в долларах и не зайчиках, но поправил.
+
avatar
0
  • dimkin
  • 09 мая 2025, 11:16
+
avatar
0
  • Horus
  • 09 мая 2025, 12:42
Там же написано что в р.
+
avatar
0
  • SotM
  • 09 мая 2025, 14:25
Стало, после того, как автор исправил.
+
avatar
+1
Обзор понравился. Подскажите а как вы организовали зауск интернет радио? Тоже такой хочется организовать :)
«произношу «Окай Набу, включить музыку», а оно берёт и включает заранее настроенный скрипт с синонимом «Музыку», который запускает проигрывание интернет радио»
+
avatar
+1
Да довольно просто на самом деле. Есть дефолтная интеграция Radio Browser — вот добавляем её в систему, а дальше скрипт как на скрине.
Ну или вот этот же скрипт в виде ямльника
sequence:
  - action: media_player.play_media
    target:
      entity_id: media_player.home_assistant_voice_09ae4e_media_player
    data:
      media_content_id: media-source://radio_browser/fdc4bec9-60e6-4276-a1a9-6ec42ccdcd07
      media_content_type: audio/mpeg
    metadata:
      title: Classic FM
      thumbnail: https://radio-24.ru/img/logo/logo-781.png
      media_class: music
      children_media_class: null
      navigateIds:
        - {}
        - media_content_type: app
          media_content_id: media-source://radio_browser
        - media_content_type: music
          media_content_id: media-source://radio_browser/country/RU
alias: Включи музыку
description: ""
Если что, тут алиас — это не синоним для голосового управления. Чтобы добавить синоним для какого-то объекта, проваливаемся в его настройки и жмём обведённый пункт меню
+
avatar
0
  • dimkin
  • 09 мая 2025, 11:28
что странно — на сайте обещано больше/лучше

Для сравнения
+
avatar
+2
Ну, ready to use я бы её точно не назвал. В любом случае, следует понимать что русский язык в сравнении с английским сильно сложнее для распознавания, а так же что в целом эти все шкалы вилами по воде, т.к. на стороне команды HA по сути только модель обработки команд, которые уже переведены в текст, когда самое сложное тут — корректно текст распознать. По сути никто не мешает вместо whisper прикрутить какой-то другой STT движок(например в лёгкую ищется вариант с OpenAI либо сразу готовый докер образ сVOSK). Да и как я — накидать синонимов в железки тоже никто не мешает. Так что статус довольно нечёткий
+
avatar
+4
  • dimkin
  • 09 мая 2025, 11:49
на тему «простой английский язык» и распознование речи я всегда вспоминаю вот это
+
avatar
0
Ну дык это видео старое почти как я)
По факту, на сейчас распознавание английского сильно шагнуло вперёд, и в силу количества носителей языка, и в силу возросших вычислителлных мощностей. Да и сам язык — объективно — проще. Нет падежей, нет склонеений, произношение слов не имеет десятка разных форм с мигающими гласными и прочими такими приколами. Всех сложностей — конечный и детерминированный список неправильных глаголов, с которыми STT движок быстрей всего никогда не столкнётся, т.к. конструкции со всякими хитрыми временами никто в голосовых командах использовать не будет. Может, какой-нибудь эсперанто был бы ещё проще, но кому он реально нужен?
+
avatar
+1
  • xNIXx
  • 09 мая 2025, 12:18
А нарукоблудить самостоятельно из esp и микрофонов не получится? Будет поди раза в полтора дешевле. Хотя корпус итп… проще и правда купить.
+
avatar
+2
Так я написал, народ рукоблудил, и даже есть условно «готовое» решение за полтора килорубля, но работалотоно прискорбно
+
avatar
0
Интересно, с чем связаны проблемы? Ведь у ESP32 есть варианты с внешней ОЗУ и например можно прикрутить I2S микрофон. Собственно только эти две вероятные причины и увидел, то есть возможная нехватка производительности при использовании модулей без внешней ОЗУ и некачественный микрофон.
+
avatar
+1
Я бы сказал, главная причина — отсутствие шумодава. Даже качественный электретный капсюль слышит очень много лишнего
+
avatar
0
  • si1v3r
  • 09 мая 2025, 15:02
Народ, а где сейчас хорошие ресурсы по HA?
+
avatar
0
А чем офф. дока не устраивает?
+
avatar
0
Если с настройкой чего-либо помощь нужна — хорошо помогает deepseek. Если просто посмотреть, чего там сообщество придумало с прошивками разных девайсов и всякие интересные аддоны — тогда на ютуб каналы У Павла и Alex Kvazis
+
avatar
0
Такая большая задержка перед выполнением команд — это из-за железа апельсины? Хотелось бы побыстрее для локального управления.
+
avatar
0
Да. На N100 я видел выполняется быстро.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.