Skip to content

feat: голосовые уведомления об ошибках через станцию - #34

Merged
0xcodepunk merged 1 commit into
mainfrom
feature/voice-error-alerts
Jul 5, 2026
Merged

feat: голосовые уведомления об ошибках через станцию#34
0xcodepunk merged 1 commit into
mainfrom
feature/voice-error-alerts

Conversation

@0xcodepunk

Copy link
Copy Markdown
Owner

Проблема

Ошибки умирали молча в логах: «Алиса, включи стрим» при недоступном Ruark просто ничего не делала, а если цикл стриминга падал посреди сессии и не мог восстановиться (например, умер DLNA-сервер) — оставалась необъяснимая тишина.

Что сделано

  • YandexStationControls.say(phrase) — локальный TTS: sendText с префиксом «Повтори за мной» заставляет Алису произнести фразу вслух.
  • Провал старта: Ruark не найден (или упал при подключении), а станция доступна → перед остановкой WebSocket станция говорит «Стрим не запустился: не вижу Руарк в сети». Если недоступна сама станция — озвучивать нечем, остаётся лог.
  • Развал в середине сессии: _wrap_streaming считает падения подряд; после 3 быстрых падений станция размьючивается (иначе объявление не услышать) и один раз говорит «Стрим сломался и сам не восстанавливается, загляни в логи». Пауза больше 60 секунд между падениями сбрасывает серию — редкие одиночные сбои с самовосстановлением остаются тихими, спама нет.

Тесты

99 тестов (+5): формат TTS-команды, озвучка при ненайденном Ruark, тишина при недоступной станции, ровно одно уведомление на серию падений, тишина при коротком сбое с восстановлением. mypy и flake8 чистые.

Проверка локально

  1. Выключи Ruark из розетки → «Алиса, включи стрим» → через ~20 секунд поиска Алиса должна голосом сказать, что не видит Руарк.
  2. Запусти стрим нормально, затем убей DLNA-сервер (Ctrl+C во втором окне) → в течение нескольких секунд станция размьютится и объявит, что стрим сломался; повторных объявлений быть не должно.

🤖 Generated with Claude Code

- добавлен метод say() в YandexStationControls: локальный TTS через sendText с префиксом «Повтори за мной» (TTS_REPEAT_PREFIX)
- при провале старта из-за ненайденного Ruark станция озвучивает причину, если WebSocket доступен (_announce_error, RUARK_MISSING_PHRASE)
- в _wrap_streaming добавлен счётчик падений подряд: после 3 быстрых падений станция размьючивается и один раз озвучивает STREAM_BROKEN_PHRASE
- добавлены константы STREAMING_FAILURE_ANNOUNCE_AFTER и STREAMING_FAILURE_STREAK_RESET (пауза 60с сбрасывает серию)
- добавлены тесты: формат TTS-команды, озвучка при ненайденном Ruark, тишина при недоступной станции, одно уведомление на серию падений, тишина при коротком сбое
@0xcodepunk
0xcodepunk merged commit d1203bd into main Jul 5, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant