Перейти к содержимому

Настройка

Sendspin Bluetooth Bridge хранит постоянные настройки в config.json внутри директории /config. Управлять этими значениями можно через веб-интерфейс, через вкладку настройки аддона Home Assistant или напрямую через файл.

Есть два основных способа управлять настройками:

ПоверхностьДля чего подходитЧто важно
Веб-интерфейсЕжедневное управление устройствами, адаптерами, auth и runtime-поведениемРаботает для Docker, LXC и аддона
Configuration таб аддона HASupervisor-managed параметры аддонаУдобен для HA-native редактирования

Общий вид обновлённого раздела Configuration

Новый раздел конфигурации разбит на пять вкладок вместо одной длинной формы.

ВкладкаЧто в ней находится
GeneralИмя bridge, timezone, latency, web/UI-порты, smooth restart, update policy
DevicesТаблица колонок, сканирование, импорт paired-устройств
BluetoothИмена адаптеров, reconnect policy, codec preference
Music AssistantToken flows, endpoint MA, monitor, routing toggles
SecurityLocal auth, session timeout, защита от перебора

General содержит настройки всего экземпляра bridge:

  • Bridge name — добавляется к именам плееров как Player @ Name.
  • Timezone — с live preview текущего времени.
  • PulseAudio latency (ms) — больше значение = выше устойчивость на слабом железе.
  • Web UI port — порт прямого доступа в браузере для standalone или дополнительный прямой порт в режиме HA addon.
  • Base player listen port — стартовый порт для автоматически назначаемых sendspin listener’ов устройств.
  • Smooth restart — mute перед перезапуском и показ прогресса.
  • Check for updates / Auto-update — доступны вне режима HA addon.

Если оставить поля портов пустыми, standalone-режим использует 8080 для web UI и 8928 для listener’ов плееров. В режиме Home Assistant addon основные channel defaults остаются фиксированными: 8080 / 8928 для stable, 8081 / 9028 для rc и 8082 / 9128 для beta. Если в addon-режиме задать другой WEB_PORT, bridge откроет дополнительный прямой listener, а HA Ingress продолжит работать через фиксированный порт канала.

Вкладка Devices с таблицей fleet и discovery workflow

Devices разделена на две роли:

  • Device fleet — основная таблица повседневных изменений.
  • Discovery & import — поиск nearby speakers и импорт уже спаренных устройств.

Каждая строка устройства хранит:

ПолеДля чего нужно
EnabledВременно исключить устройство из старта
Player nameИмя в Music Assistant
MACBluetooth-адрес колонки
AdapterПривязка к конкретному контроллеру
PortОпциональный listen_port; иначе bridge использует BASE_LISTEN_PORT + индекс устройства
Delaystatic_delay_ms компенсация задержки
LiveRuntime badge вроде Playing, Connected, Released или Not seen

В advanced-части строки доступны:

  • Preferred format вроде flac:44100:16:2.
  • Listen host (listen_host) для переопределения advertised-адреса устройства.
  • Keepalive interval (keepalive_interval) для колонок, которые слишком быстро уходят в сон.

Текущее runtime-поведение завязано на интервале: любой положительный keepalive_interval включает keepalive-тишину, значения меньше 30 секунд поднимаются до 30, а 0 или пустое поле keepalive выключают. В старых конфигурациях Home Assistant addon ещё может встречаться legacy-флаг keepalive_silence, но актуальное поведение bridge определяется через keepalive_interval > 0.

Вкладка Bluetooth с inventory адаптеров и recovery policy

Bluetooth объединяет inventory и политику восстановления:

  • Понятные имена адаптеров для dashboard.
  • Ручные записи адаптеров, если автоопределение неполное.
  • Refresh detection.
  • Настройку BT check interval.
  • Настройку Auto-disable threshold. При достижении порога устройство сохраняется как disabled, пока вы не включите его снова.
  • Переключатель Prefer SBC codec.

Вкладка Music Assistant с token actions и bridge integration settings

Music Assistant объединяет состояние соединения и auth helper’ы:

  • summary Connection status,
  • Discover для поиска сервера или повторного использования уже известного URL,
  • Get token с логином/паролем MA. При успехе bridge сохраняет MA_API_URL, long-lived MA_API_TOKEN и MA_USERNAME, но не сохраняет пароль,
  • fallback через Home Assistant OAuth / MFA, если экземпляр MA работает поверх HA и прямой логин MA этого требует,
  • Get token automatically для HA-backed MA. В HA Ingress UI сначала пробует silent auth через текущий HA browser token, а затем при необходимости переходит к popup-flow,
  • ручное поле MA API token,
  • поля MA server и MA WebSocket port,
  • переключатели WebSocket monitor, Route volume through MA, Route mute through MA.

В standalone-режиме вкладка Security управляет локальным доступом к веб-интерфейсу:

  • Enable web UI authentication,
  • Session timeout (1–168 часов),
  • Brute-force protection,
  • поля Max attempts, Window и Lockout,
  • flow Set password.

Standalone-login использует CSRF-защищённые формы и cookie с SameSite=Lax + HttpOnly. В режиме Home Assistant addon доступ всегда контролирует сам HA / Ingress, поэтому standalone-контролы скрываются.

Нижняя панель общая для всех вкладок:

  • Save записывает config.json.
  • Save & Restart сохраняет и сразу перезапускает сервис. Используйте это для изменений портов, auth/session-настроек и любых параметров, применяемых на старте.
  • Cancel восстанавливает последние сохранённые значения формы.
  • Download экспортирует share-safe JSON-файл с timestamp и без секретов вроде MA_API_TOKEN, password hash и secret key.
  • Upload импортирует ранее сохранённый config и сохраняет существующие password hash, secret key и MA token на стороне сервера.

Панель Configuration аддона HA с core options

В режиме аддона Home Assistant Supervisor показывает собственную вкладку Configuration.

Откройте Настройки → Аддоны → Sendspin Bluetooth Bridge → Configuration.

Основные поля аддона:

ПараметрНазначение
sendspin_serverХост/IP Music Assistant или auto для mDNS
sendspin_portПорт Sendspin WebSocket, обычно 9000
web_portНеобязательный прямой host-network web-порт; Ingress продолжает использовать фиксированный addon-порт
base_listen_portСтартовый порт для автоматически назначаемых listener’ов устройств
bridge_nameНеобязательная метка экземпляра bridge
tzЧасовой пояс IANA
pulse_latency_msecПодсказка размера аудиобуфера
prefer_sbc_codecПредпочтение более лёгкого кодека
bt_check_intervalИнтервал polling-проверки
bt_max_reconnect_failsПорог auto-disable
auth_enabledStandalone-style auth toggle для прямого доступа; в HA addon mode auth всё равно принудительно контролируется HA
ma_api_url / ma_api_tokenREST-интеграция с Music Assistant
volume_via_ma / mute_via_maМаршрутизация управления через MA
update_channelВыбор release-lane для in-app update checks и предупреждений
log_levelБазовый уровень логирования

Списки устройств и адаптеров аддона HA вместе с диалогом редактирования устройства

Диалог редактирования устройства в конфигурации аддона HA

Через addon form доступны и полные структуры Bluetooth devices и Bluetooth adapters. Старые addon-конфиги могут по-прежнему сохранять legacy-поле keepalive_silence при трансляции, но текущее runtime-поведение определяется через keepalive_interval.

Bridge поддерживает два необязательных top-level override-поля:

КлючК чему применяетсяЗначение по умолчаниюЧто важно
WEB_PORTlistener веб-интерфейса8080 вне HA addon modeВ режиме Home Assistant addon фиксированный ingress listener продолжает работать на дефолтном порту трека аддона; настроенный WEB_PORT открывает только дополнительный прямой listener.
BASE_LISTEN_PORTавтоматически назначаемые per-device Sendspin listener’ы8928 вне HA addon modeИспользуется как стартовый порт, если устройство не задаёт собственный listen_port.

В Home Assistant addon mode дефолтные значения специально разведены, чтобы избежать коллизий, если на одном HAOS-хосте работают разные варианты аддона:

Установленный трек аддонаПорт ingress / web по умолчаниюBase listen port по умолчанию
Stable80808928
RC80819028
Beta80829128

Используйте overrides, если вам нужен:

  • прямой не-Ingress web listener в addon-режиме;
  • нестандартный web-порт для Docker/LXC/systemd;
  • отдельный диапазон listener’ов для большого числа устройств на одном хосте.

Каждое Bluetooth-устройство может также задавать собственные listen_host и listen_port.

Используйте device-level overrides, если:

  • конкретной колонке нужен стабильный известный порт;
  • вы делите устройства между несколькими bridge-экземплярами и хотите явный план портов;
  • нужно убрать коллизию, не двигая весь базовый диапазон bridge.
КлючТипОписание
SENDSPIN_SERVERstringХост Music Assistant или auto
SENDSPIN_PORTintegerПорт Sendspin WebSocket
WEB_PORTinteger или nullOverride прямого web-порта
BASE_LISTEN_PORTinteger или nullНеобязательный base port для автоматически назначаемых listener’ов устройств
BRIDGE_NAMEstringНеобязательная метка экземпляра
TZstringЧасовой пояс IANA
PULSE_LATENCY_MSECintegerПодсказка аудиобуфера
BT_CHECK_INTERVALintegerИнтервал проверки Bluetooth
BT_MAX_RECONNECT_FAILSintegerПорог auto-disable
PREFER_SBC_CODECbooleanПредпочтение кодека с меньшей нагрузкой
AUTH_ENABLEDbooleanВключить локальную auth-защиту вне HA addon mode; в HA addon mode auth всегда принудительно включена
SESSION_TIMEOUT_HOURSintegerСрок жизни browser-сессии
BRUTE_FORCE_PROTECTIONbooleanВключить временную блокировку после неудачных входов
BRUTE_FORCE_MAX_ATTEMPTSintegerМаксимум попыток в окне
BRUTE_FORCE_WINDOW_MINUTESintegerRolling window для неудачных входов
BRUTE_FORCE_LOCKOUT_MINUTESintegerДлительность блокировки
MA_API_URLstringURL REST API Music Assistant
MA_API_TOKENstringТокен Music Assistant API
MA_USERNAMEstringUsername, использованный при последнем успешном MA login-flow
MA_WEBSOCKET_MONITORbooleanLive monitor now-playing и очереди
VOLUME_VIA_MAbooleanПропускать volume через MA
MUTE_VIA_MAbooleanПропускать mute через MA
SMOOTH_RESTARTbooleanMute перед перезапуском и показ прогресса
UPDATE_CHANNELstringКанал обновлений: stable, rc или beta
AUTO_UPDATEbooleanРазрешить auto-update там, где он поддерживается
CHECK_UPDATESbooleanВключить проверку обновлений
LOG_LEVELstringБазовый уровень логирования
TRUSTED_PROXIESarrayДополнительные proxy IP, которым разрешено передавать trusted Ingress headers
{
"BLUETOOTH_DEVICES": [
{
"mac": "AA:BB:CC:DD:EE:FF",
"player_name": "Колонка в гостиной",
"adapter": "hci0",
"static_delay_ms": -500,
"listen_host": "0.0.0.0",
"listen_port": 8928,
"preferred_format": "flac:44100:16:2",
"keepalive_interval": 60,
"enabled": true
}
]
}
ПолеОписание
macBluetooth MAC колонки
player_nameИмя в Music Assistant
adapterID или MAC адаптера
static_delay_msФиксированная компенсация задержки
listen_hostПереопределение advertised host для listener’а этого устройства
listen_portПользовательский порт listener’а; если не задан, runtime использует BASE_LISTEN_PORT + индекс устройства
preferred_formatПредпочтительный аудиоформат
keepalive_silenceLegacy-совместимый флаг из старых addon-конфигов; отдельного переключателя для него в текущем web UI нет
keepalive_intervalИнтервал keepalive-тишины в секундах; любое положительное значение включает keepalive, минимальный эффективный интервал — 30 секунд
enabledПри false устройство пропускается на старте

Каждый эффективный listen_port должен быть уникальным для устройства. Если на одном хосте работает несколько bridge-экземпляров, задайте им разные диапазоны BASE_LISTEN_PORT или явные listen_port для каждого устройства.

{
"BLUETOOTH_ADAPTERS": [
{
"id": "hci0",
"mac": "C0:FB:F9:62:D6:9D",
"name": "Адаптер в гостиной"
}
]
}
ПолеОписание
idИмя интерфейса, например hci0
macMAC-адрес адаптера
nameПонятная метка в UI
  • HA Ingress продолжает использовать addon channel port даже если вы настроили собственный WEB_PORT.
  • Multi-bridge setups должны использовать непересекающиеся диапазоны WEB_PORT и BASE_LISTEN_PORT.
  • Per-device overrides важнее: listen_port и listen_host перекрывают top-level defaults.
  • Конфликт портов критичен для daemon: дублирующиеся listen_port не дадут listener’у устройства забиндиться.

Bridge напрямую читает небольшой набор runtime/bootstrap-переменных окружения. CONFIG_DIR всегда определяет, где находится config.json, а env-override для WEB_PORT / BASE_LISTEN_PORT разрешаются раньше сохранённых значений конфига.

ПеременнаяОписание
WEB_PORTOverride прямого web UI порта. В standalone default — 8080; addon channels сохраняют фиксированные primary ports и могут открыть этот порт дополнительно
BASE_LISTEN_PORTСтартовый порт для auto-assigned player listeners. Stable default — 8928, rc — 9028, beta — 9128
TZOverride часового пояса, используемый при инициализации локального времени runtime
BRIDGE_NAMEНеобязательный override имени bridge до появления сохранённого имени
CONFIG_DIRПуть к директории конфига