🎤

Я делал команды, я инициировал объявления, но до сегодняшнего дня не пробовал это *сочетать*.

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

Не получив ответа, получив ответ "Не надо"/"Нет" или получив что-то левое, он… ну да, ничего не делает.
Зато если согласиться, то он делает, что собирался.

🤗 И минутка благодарности.

Вот забавно, очень простое решение, а насколько доставляет им потом пользоваться.

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

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

Идея простая — взять звуки из MGSV: The Phantom Pain, объявляющие о закате и рассвете, и научить их проигрывать при соответствующих событиях из .

Встроенные HTTP-средства, кажется, вообще не предполагают работы с файлами ни в каком виде — номинально упоминают это в документации, но реально дают пустые значения; а сторонние либо спускаются совсем на уровень внутренностей HTTP (multipart, boundaries, вот это всё), либо не поддерживают бинарные файлы (в моём случае, WAV).

Спасибо хотя бы за то, что там есть аварийный выход — возможность дёргать команды в шелле. Я загрузил WAV-файлы туда через scp руками, а для их отправки написал команду на базе curl.

Но как-то это всё вообще не в духе проекта.

🎤 Хроники .

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

За счёт простоты механизма реализация заняла примерно минут 15. Сила ! Я этот пост дольше пишу.

Что я усвоил: Deck прекрасно работает в качестве чистого источника информации — готовые UI, простой API. Но когда нужно реагировать на изменения в нём, например для переобучения модели распознавания речи, прямого решения нет. Разве что регулярно опрашивать сервер, следя за ETag (кэш-отпечатком) ответа и при каждом его изменении запускать переобучение. Оно недолгое, несколько секунд, но… не. Не.

Хочу нормальные вебхуки. К сожалению, они если и будут, то нескоро: github.com/nextcloud/deck/issu

🎤 Хроники (тред)

шикарен. Наконец-то сделал средство, которое поможет избежать значительного количества ложных срабатываний: "помолчи N минут".

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

Под выбор числительного в ответах я даже подпоток (subflow) сделал. Попутно, кстати, нашёл прелюбопытнейшую справочную страничку на сайте Unicode о правилах выбора форм слов для разных числительных в разных языках мира. Немецкий больше не кажется таким уж страшным!
unicode.org/cldr/cldr-aux/char

Show thread

🎤 Хроники (тред)

✔️ Качественный скачок сегодня: привинтил к нему . Теперь Rhasspy умеет говорить (не только отвечать, а, например, оповещать о событиях). И в целом работать над сценариями с внутренним состоянием там явно будет удобнее.

🤔 NodeRED силён! Его получилось вклинить между Rhasspy и так, что Rhasspy общается с ним по тому же API, от HA. NR обрабатывает что может, а нераспознанное шлёт дальше, в HA, где живут остальные обработчики. С – совместимость.

Show thread

🎤 Хроники (эпизод 4)
В очередном обновлении прилетел речевой движок Larynx с тремя русскими голосами, которые звучат неплохо для голосов на публичных записях. Но местами со странностями, поэтому формулировки ответов приходится проверять на произносимость.
А ещё при нажатии на номер версии в вебморде открывается документация к API. Надо теперь прибить его к Home Assistant и можно делать команды типа "выключить на N часов/минут" или прилепить ещё один обработчик команд (?).
Ух-х!

Show thread
Mastodon.ml

Русская нода социальной сети "Мастодонт", части Fediverse - всемирной федерации социальных сетей. Зона общения, свободная от рекламы и шпионажа, теперь и в России.