Ура! Запустил в своём умном доме #Rhasspy
https://rhasspy.readthedocs.io/en/latest/
Теперь он меня слушается в буквальном смысле, и продолжит слушаться, даже если оторвать интернет.
• Активация через Porcupine, готовых моделей для русских слов там нет, но есть схоже звучащие английские варианты.
• Распознавание речи через Kaldi. Пока ни разу не ошибся.
• Команды шлёт в #HomeAssistant Документацию надо б дописать.
• Отвечает… #eSpeak'ом. Позже прикручу #RHVoice, а пока буду пугать гостей, хи-хи.
🎤 Хроники #Rhasspy, эпизоды нумеровать уже не вижу особого смысла. Предыдущие – в треде.
Произошло не сказать чтоб много. Разве что я научил его посредством ИК-излучателя запускать вентилятор на заданную скорость. Началось с наблюдения, что вентилятор всегда стартует на скорости 3 (из 10), и оттуда понеслось.
Идея внедрения отвечалки на вопрос "Где хранится Х?" почти стоит, но не заброшена – в поисках способа редактирования я набрёл на "домашний AirTable", пробую его: https://www.nocodb.com/
🎤 Хроники #Rhasspy (тред)
✔️ Качественный скачок сегодня: привинтил к нему #NodeRED. Теперь Rhasspy умеет говорить (не только отвечать, а, например, оповещать о событиях). И в целом работать над сценариями с внутренним состоянием там явно будет удобнее.
🤔 NodeRED силён! Его получилось вклинить между Rhasspy и #HomeAssistant так, что Rhasspy общается с ним по тому же API, от HA. NR обрабатывает что может, а нераспознанное шлёт дальше, в HA, где живут остальные обработчики. С – совместимость.
...впрочем, без казусов тоже не обошлось.
Выше по треду упоминал NocoDB. Э... в общем, в результате бага он может неожиданно для вас (и даже для себя) опустошить таблицу, если сделать bulk delete над объектом БЕЗ id.
Судя по логам, постгрес даже получает запрос с `id = "undefined"` (привет, NodeJS!) и прямо его в запрос и вставляет. А из-за неаккуратной обработки ошибок там получается что-то вроде `DELETE FROM table WHERE true`. И хоба!
Ситуацию спасли снапшоты btrfs, но надо б зарепортить.
🎤 Хроники #Rhasspy (тред)
#NodeRED шикарен. Наконец-то сделал средство, которое поможет избежать значительного количества ложных срабатываний: "помолчи N минут".
Самым сложным моментом во всей этой истории было подружиться с русским языком, а именно числительными и падежами. В языке грамматики команд поддержка числителей только в именительном падеже и без сопоставления правилам для числительных, и в ответах тоже неплохо бы соблюдать правила, никому не хочется слышать "замолкаю на 1 минут".
Под выбор числительного в ответах я даже подпоток (subflow) сделал. Попутно, кстати, нашёл прелюбопытнейшую справочную страничку на сайте Unicode о правилах выбора форм слов для разных числительных в разных языках мира. Немецкий больше не кажется таким уж страшным!
https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html
Интересно то, что хоть настройкой вентилятора и занимается очень простая программа, удовольствие от доведения её до работоспособности весьма значительное. Чуть математики, чуть программирования, чуть экспериментов. Хорошо, что этому удалось в своё время научиться.
А NocoDB, если отложить тот факт что в README он врёт и выдаёт планируемые фичи за имеющиеся – неплох. Таблицы делает и показывает, и к ним сразу же есть очень простой API, по которому есть автосгенерированная документация в Swagger.