Найти тему
Константин Н.

Алиса, включи Spotify на HomePod! теперь на Java.

Оглавление

предыдущий вариант решения проблемы был сделан в Tasker

https://dzen.ru/a/ZACi4NocYSg0U_mq

виджеты для управления колонками
виджеты для управления колонками

Теперь на Java

YouTube www.youtube.com/watch?v=1xTXht4AsQk

GitHub https://github.com/knovash/squeeze-alice

-2

Проблема: есть HomePod mini и желание слушать на нем Spotify, радио di.fm, jazzradio.com, somafm.com и т.п. без iphone, с пульта и голосом управлять через Алису.

  • почему HomePod mini ? - лучщий звук в этом размере за эти деньги среди wifi колонок.
  • почему Spotify ? - потому что он играет из каждого утюга.
  • почему через Алису ? - лучший голосовой асистент для умного дома на руском языке.

Я­ понял что самые используемые у меня команды для музыки это:

Алиса, музыку тише/громче - регулировка громкости в этой комнате.

Алиса, все тихо/громко - установить громкость на всех колонках.

Алиса, включи канал 'пять' - включиться закладка из избранного LMS (радио url, плейлист Spotify, станция DI.fm, Jazzradio.com и т.п.)
Если колонка
играла канал включится без изменения громкости и группы, если колонка играла в группе - канал будет играть на всех колонках.
Если колонка
не играла - разбудить, установить громкость приемлемой для данного времени, канал включиться только в этой комнате,
если колонка была в группе - отключить от группы.

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

Алиса, выключи музыку - все колонки остановить.

Алиса, включи колонку в спальне/в душе/на веранде - тоже что включи музыку, только с указанием на конкретной колонке/комнате.
Если колонка
играла - продолжить играть.
Если колонка
не играла - отключить от группы, разбудить, установить приемлемую громкость, подключиться к уже играющей, если нет: последнее игравшее, если нет: первое в избранном.

Алиса, выключи колонку в спальне/в душе/на веранде - остановить,
Если колонка играла в группе - отсоединить и остановить.

Алиса, включи Спотифай - перевод того что играет сейчас в Spotify (в телефоне) на колонку LMS в комнате.

Для каждой колонки сохраняются собственные значения:
- значения приемлемой громкости по времени.
например для HomePod в гостинной 00.00 : 5, 07.00 : 10, 09.00 : 20, 20.00 : 10
- шаг громкости для комманды Алиса, музыку громче/тише
- значения громкости тихо и громко для комманды Алиса, все тихо/громко
- значение блокировки (черный список)
- значение задержки ожидания включения колонки - невозможно определить реально колонка уже играет или нет. после комманды play, LMS на запрос состояния будет отвечать mode=play (он отправляет уже поток на колонку, хотя колонка могла еще не загрузиться). время загрузки колонки можно установить только экспериментально для каждой колонки. только после загрузки можно регулировать громкость.

Значения можно менять через запрос типа: action=change_value&value_name=volumelow&value=4&player=homepod
или с телефона через Tasker меню

меню для изменения настроек
меню для изменения настроек

Как это было реализовано через Tasker + AutoRemote и навык Домовенок Кузя:

  1. Алиса выполняет команду для виртуального устройства “Музыка” в комнате.
  2. Навык Домовенок Кузя отправляет http запрос на адрес AutoRemote доступный из интернета. query содержит комманду и значение для Tasker.
  3. Tasker на основании комманды и значения выполняет сценарий отправляя http запросы на локальный LMS.
    Недостатки: задержки, нужен твбокс для работы Tasker (). сложней контроль ошибок в Tasker.
    Плюсы: nocode решение. изменение логики доступно в таскер.

Как это реализовано на Java в Squeeze-Alise:

  1. Алиса выполняет команду для виртуального устройства “Музыка” в комнате.
  2. Навык Домовенок Кузя отправляет http запрос на адрес Localtunnel доступный из интернета. query содержит комманду и значение для Squeeze-Alise.
  3. Squeeze-Alise на основании комманды и значения выполняет сценарий отправляя http запросы на локальный LMS.
    Плюсы: запускается на тойже машине где LMS, быстро работает, проще контроль ошибок в IDEA.
    Минусы: изменение логики в коде.

Установка, но это не точно...

1. скачать тут https://github.com/knovash/squeeze-alice
2. в config.properties указать ip LMS и соответствие названий колонок в LMS и в query от Кузи
3. запустить
java -jar squeeze-alice-1.0.jar
4. оно получит от LMS список колонок и будет ожидать команд от Алисы (навыка Кузи)

тут https://alexstar.ru/smarthome создать виртуальные устройства колонки и правила для каждой колонки
"https://squeezz.loca.lt/cmd?action=turn_on_music&player=homepod"
"https://squeezz.loca.lt/cmd?action=turn_off_music&player=homepod"
"https://squeezz.loca.lt/cmd?action=turn_on_speaker&player=homepod"
"https://squeezz.loca.lt/cmd?action=turn_off_speaker&player=homepod"
"https://squeezz.loca.lt/cmd?action=volume&player=homepod&value={value}"
"https://squeezz.loca.lt/cmd?action=channel&player=homepod&value={value}"

для проброса адреса сервера в интернет можно использовать LocalTunel
sudo apt install npm
sudo npm install -g localtunnel
lt --port 8010 --subdomain squeeze