How can I assign a radio station (e.g., Bayern 3) to Hybrid Preset 3(tj: install v3.7.1 for fix #16
Replies: 104 comments 65 replies
|
Once I could verify that MA could find it and play it directly. (It took a while for MA to come up withit) I was able to find it in STH search and save and assign to preset |
|
If you watch my first demo video in the readme u can see me do it...Just "save" from your search results or recently played and it will then show up in your library. Then edit the tile and you can assign it to global or speaker specific preset and also set playback options if they are enabled for a specific source type (ie playlist,,,play all, random. repeat etc) . You do not need to run it first in MASS. Just make sure your speaker protocol is set to DLNA and dont sync your providers... So when STH calls mass.... then mass will get the source directly from the provider instead of it own local cached copy |
|
For some reason. The sources did not update. can you show me the contents of the highlight 3 files in your log... It will have your IP infront of the name BUT first try this.... Go to speaker Admin page and click reboot your speaker. Im looking for these messages below |
|
Just to clarify my setup: I still have another Music Assistant instance running on port 8095 on a different IP address (my original MA installation). But now I also have Hybrid and the internal MASSA instance running inside the same container, sharing the same IP address and the same network namespace. Unfortunately, the preset assignment issue still persists. `[10:03:42] [INFO] [Boot] .env already exists. Skipping generation. Let me know what you want me to check next. |
|
Just wanted to give an update — everything is working perfectly now. Here is the current Hybrid log after the fix:
Two quick questions: Will the hijack / developer mode survive a full reboot of the Bose SoundTouch 20? Thanks again for your work on this project! — Andreas |
|
I’m still in bed 5am but hard read on my phone (iPhone 13 mini) so u must have gotten the “hybrid Bose cloud delivery msg after speaker reboot? Do u do anything different from my detail steps msg last night? I have another user with same issue. On May 8, 2026, at 3:46 AM, Andreas221988 ***@***.***> wrote:
@TJGigs
Just wanted to give an update — everything is working perfectly now.
Here is the current Hybrid log after the fix:
[10:40:59] [INFO] [Boot] .env already exists. Skipping generation. [10:40:59] [INFO] [Boot] speakers.json already exists. Skipping generation. [10:40:59] [INFO] [Boot] library.json already exists. Skipping generation. [10:41:00] [INFO] [10:41:00] [INFO] [Boot] ✅ Music Assistant is running (v2.8.6). [10:41:00] [INFO] [Boot] ✓ App is up to date (v3) [10:41:00] [INFO] [10:41:00] [INFO] ======================================================================= [10:41:00] [INFO] ==== BOSE SOUNDTOUCH HYBRID 2026: V3 [10:41:00] [INFO] ==== MUSIC ASSISTANT: v2.8.6 [10:41:00] [INFO] ======================================================================= [10:41:00] [INFO] [OK] Bose Speaker | Type: SoundTouch 20 | IP: 192.168.178.40 [10:41:00] [INFO] ----------------------------------------------------------------------- [10:41:00] [INFO] [Boot] Connecting Real-time WebSockets... [10:41:00] [INFO] [DeviceState] 🔌 Initializing WebSocket for Bose Speaker (192.168.178.40) [10:41:00] [INFO] ----------------------------------------------------------------------- [10:41:00] [INFO] ➡️ Web UI accessible at: http://192.168.178.195:3000/control.html [10:41:00] [INFO] [10:41:00] [INFO] [DeviceState] 💤 192.168.178.40 entered Standby. [10:41:42] [INFO] [Manager] Request: Bayern 3 [10:41:42] [INFO] [DeviceState] 🔒 UI Locked for 192.168.178.40: Waiting for TRACK... [10:41:42] [INFO] [MASS] 🎵 Play Request: Bayern 3 on SoundTouch 20 [10:41:42] [INFO] 💤 Speaker is OFF (Confirmed Standby). Waking up... [10:41:47] [INFO] [MASS] 🧹 Clearing Queue for SoundTouch 20... [10:41:51] [INFO] [DeviceState] 🔓 Safety Timeout: UI Unlocked for 192.168.178.40 [10:41:51] [INFO] [DeviceState] 🚨 Deleting EXPECTATION lock for 192.168.178.40! [10:42:22] [INFO] [DeviceState] 🎵 192.168.178.40 playing "Bayern 3" via ard_audiothek [10:42:23] [INFO] [Control] Request: POWER -> 192.168.178.40 [10:42:23] [INFO] [DeviceState] 🧹 Session Cleared for 192.168.178.40 (Power Down / Reset) [10:42:23] [INFO] [Control] ⏻ Power Toggle (Current: On) [10:42:24] [INFO] [DeviceState] 🔓 Lock Met (POWER): UI Unlocked for 192.168.178.40 [10:42:24] [INFO] [DeviceState] 🚨 Deleting EXPECTATION lock for 192.168.178.40 [10:42:24] [INFO] [DeviceState] 💤 192.168.178.40 entered Standby. [10:42:25] [INFO] [Control] Request: PRESET_1 -> 192.168.178.40 [10:42:25] [INFO] [DeviceState] 🔒 UI Locked for 192.168.178.40: Waiting for PRESET... [10:42:27] [INFO] [Bridge] 🔍 Action: GET /preset/1.mp3 from 192.168.178.40 [10:42:27] [INFO] 🔘 PHYSICAL PRESS: P1 from 192.168.178.40 [10:42:27] [INFO] ✅ Triggering via MASS: Bayern 3 [10:42:27] [INFO] [MASS] 🎵 Play Request: Bayern 3 on SoundTouch 20 [10:42:27] [INFO] [MASS] 🧹 Clearing Queue for SoundTouch 20... [10:42:30] [INFO] [DeviceState] 🔓 Lock Met (PRESET): UI Unlocked for 192.168.178.40 [10:42:30] [INFO] [DeviceState] 🚨 Deleting EXPECTATION lock for 192.168.178.40 [10:42:30] [INFO] [DeviceState] 🎵 192.168.178.40 playing "Bayern 3" via ard_audiothek [10:42:34] [INFO] [DeviceState] 💤 192.168.178.40 entered Standby. [10:42:37] [INFO] [Bridge] 🔍 Action: GET /preset/1.mp3 from 192.168.178.40 [10:42:37] [INFO] 🔘 PHYSICAL PRESS: P1 from 192.168.178.40 [10:42:37] [INFO] ✅ Triggering via MASS: Bayern 3 [10:42:37] [INFO] [MASS] 🎵 Play Request: Bayern 3 on SoundTouch 20 [10:42:37] [INFO] [MASS] 🧹 Clearing Queue for SoundTouch 20... [10:42:45] [INFO] [DeviceState] 🎵 192.168.178.40 playing "Bayern 3" via ard_audiothek
Everything is stable now.
Two quick questions:
Can I remove the USB stick now that the hijack + developer mode is active?
Will the hijack / developer mode survive a full reboot of the Bose SoundTouch 20?
Thanks again for your work on this project!
— Andreas
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: ***@***.***>
|
|
Can u send me deep scan. From speaker. I want to see the missing line. Yes remove usb. If u cold boot speaker. That is when it talks to cloud (( the hybrid ) u will see the three message u screen shot before with the red arrows. The is key handshake. But usb redirect steps is only needed onceOn May 8, 2026, at 3:46 AM, Andreas221988 ***@***.***> wrote:
@TJGigs
Just wanted to give an update — everything is working perfectly now.
Here is the current Hybrid log after the fix:
[10:40:59] [INFO] [Boot] .env already exists. Skipping generation. [10:40:59] [INFO] [Boot] speakers.json already exists. Skipping generation. [10:40:59] [INFO] [Boot] library.json already exists. Skipping generation. [10:41:00] [INFO] [10:41:00] [INFO] [Boot] ✅ Music Assistant is running (v2.8.6). [10:41:00] [INFO] [Boot] ✓ App is up to date (v3) [10:41:00] [INFO] [10:41:00] [INFO] ======================================================================= [10:41:00] [INFO] ==== BOSE SOUNDTOUCH HYBRID 2026: V3 [10:41:00] [INFO] ==== MUSIC ASSISTANT: v2.8.6 [10:41:00] [INFO] ======================================================================= [10:41:00] [INFO] [OK] Bose Speaker | Type: SoundTouch 20 | IP: 192.168.178.40 [10:41:00] [INFO] ----------------------------------------------------------------------- [10:41:00] [INFO] [Boot] Connecting Real-time WebSockets... [10:41:00] [INFO] [DeviceState] 🔌 Initializing WebSocket for Bose Speaker (192.168.178.40) [10:41:00] [INFO] ----------------------------------------------------------------------- [10:41:00] [INFO] ➡️ Web UI accessible at: http://192.168.178.195:3000/control.html [10:41:00] [INFO] [10:41:00] [INFO] [DeviceState] 💤 192.168.178.40 entered Standby. [10:41:42] [INFO] [Manager] Request: Bayern 3 [10:41:42] [INFO] [DeviceState] 🔒 UI Locked for 192.168.178.40: Waiting for TRACK... [10:41:42] [INFO] [MASS] 🎵 Play Request: Bayern 3 on SoundTouch 20 [10:41:42] [INFO] 💤 Speaker is OFF (Confirmed Standby). Waking up... [10:41:47] [INFO] [MASS] 🧹 Clearing Queue for SoundTouch 20... [10:41:51] [INFO] [DeviceState] 🔓 Safety Timeout: UI Unlocked for 192.168.178.40 [10:41:51] [INFO] [DeviceState] 🚨 Deleting EXPECTATION lock for 192.168.178.40! [10:42:22] [INFO] [DeviceState] 🎵 192.168.178.40 playing "Bayern 3" via ard_audiothek [10:42:23] [INFO] [Control] Request: POWER -> 192.168.178.40 [10:42:23] [INFO] [DeviceState] 🧹 Session Cleared for 192.168.178.40 (Power Down / Reset) [10:42:23] [INFO] [Control] ⏻ Power Toggle (Current: On) [10:42:24] [INFO] [DeviceState] 🔓 Lock Met (POWER): UI Unlocked for 192.168.178.40 [10:42:24] [INFO] [DeviceState] 🚨 Deleting EXPECTATION lock for 192.168.178.40 [10:42:24] [INFO] [DeviceState] 💤 192.168.178.40 entered Standby. [10:42:25] [INFO] [Control] Request: PRESET_1 -> 192.168.178.40 [10:42:25] [INFO] [DeviceState] 🔒 UI Locked for 192.168.178.40: Waiting for PRESET... [10:42:27] [INFO] [Bridge] 🔍 Action: GET /preset/1.mp3 from 192.168.178.40 [10:42:27] [INFO] 🔘 PHYSICAL PRESS: P1 from 192.168.178.40 [10:42:27] [INFO] ✅ Triggering via MASS: Bayern 3 [10:42:27] [INFO] [MASS] 🎵 Play Request: Bayern 3 on SoundTouch 20 [10:42:27] [INFO] [MASS] 🧹 Clearing Queue for SoundTouch 20... [10:42:30] [INFO] [DeviceState] 🔓 Lock Met (PRESET): UI Unlocked for 192.168.178.40 [10: red 42:30] [INFO] [DeviceState] 🚨 Deleting EXPECTATION lock for 192.168.178.40 [10:42:30] [INFO] [DeviceState] 🎵 192.168.178.40 playing "Bayern 3" via ard_audiothek [10:42:34] [INFO] [DeviceState] 💤 192.168.178.40 entered Standby. [10:42:37] [INFO] [Bridge] 🔍 Action: GET /preset/1.mp3 from 192.168.178.40 [10:42:37] [INFO] 🔘 PHYSICAL PRESS: P1 from 192.168.178.40 [10:42:37] [INFO] ✅ Triggering via MASS: Bayern 3 [10:42:37] [INFO] [MASS] 🎵 Play Request: Bayern 3 on SoundTouch 20 [10:42:37] [INFO] [MASS] 🧹 Clearing Queue for SoundTouch 20... [10:42:45] [INFO] [DeviceState] 🎵 192.168.178.40 playing "Bayern 3" via ard_audiothek
Everything is stable now.
Two quick questions:
Can I remove the USB stick now that the hijack + developer mode is active?
Will the hijack / developer mode survive a full reboot of the Bose SoundTouch 20?
Thanks again for your work on this project!
— Andreas
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: ***@***.***>
|
|
Here is the log you asked for: Everything is stable now — the redirect, developer mode and MASS integration all work flawlessly. Thanks again for your amazing work on this project. Let me know if you need anything else from my side. |
|
Can u send me deep scan. From speaker. I want to see the missing line. Yes remove usb. If u cold boot speaker. That is when it talks to cloud (( the hybrid ) u will see the three message that i sent screen shot before with the red arrows. The is key handshake. But usb redirect steps is only needed once . so yes remove usb i have anopther proxima user same issue .. thx (and i leave for 2 week vac tomorrow...aurgh!) Please send me |
|
So did you move anything? And the config files you’re talking about does that mean you’re ENV in your YML the three XML files are just the log files from when the speaker reaches out to the hybrid Bose cloud and responds back with the delivery message so those files are just a post action event so I’m just curious when you say the config files were in the right place which one were you talking about? Thanks. On May 8, 2026, at 6:59 AM, Andreas221988 ***@***.***> wrote:
Here is the scan from the speaker (all XML endpoints you requested):
=== /info ===
<?xml version="1.0" encoding="UTF-8" ?>
<info deviceID="08DF1F132B9F">
<name>SoundTouch 20</name>
<type>SoundTouch 20</type>
<margeAccountUUID>2885446</margeAccountUUID>
<components>
<component>
<componentCategory>SCM</componentCategory>
<softwareVersion>27.0.6.46330.5043500 epdbuild.trunk.hepdswbld04.2022-08-04T11:20:29</softwareVersion>
<serialNumber>K4238429505625125000710</serialNumber>
</component>
<component>
<componentCategory>PackagedProduct</componentCategory>
<serialNumber>066801942460174AE</serialNumber>
</component>
<component>
<componentCategory>Lightswitch</componentCategory>
<serialNumber></serialNumber>
</component>
<component>
<componentCategory>SMSC</componentCategory>
<softwareVersion>I2014102015199423; B201306111041 081008C 2014102015199423</softwareVersion>
<serialNumber>08DF1F132BA8</serialNumber>
</component>
</components>
<margeURL>http://192.168.178.195:3000</margeURL>
<networkInfo type="SCM">
<macAddress>08DF1F132B9F</macAddress>
<ipAddress>192.168.178.40</ipAddress>
</networkInfo>
<networkInfo type="SMSC">
<macAddress>08DF1F132BA8</macAddress>
<ipAddress>192.168.178.40</ipAddress>
</networkInfo>
<moduleType>scm</moduleType>
<variant>spotty</variant>
<variantMode>normal</variantMode>
<countryCode>EU</countryCode>
<regionCode></regionCode>
</info>
=== /netStats ===
<?xml version="1.0" encoding="UTF-8" ?>
<network-data>
<devices>
<device deviceID="08DF1F132B9F">
<deviceSerialNumber>K4238429505625125000710</deviceSerialNumber>
<interfaces>
<interface>
<name>eth0</name>
<mac-addr>08DF1F132B9F</mac-addr>
<bindings>
<ipv4address>192.168.178.40</ipv4address>
</bindings>
<running>true</running>
<kind>Wireless</kind>
<ssid>FRITZ!Box 7590 KL</ssid>
<rssi>Excellent</rssi>
<frequencyKHz>0</frequencyKHz>
</interface>
</interfaces>
</device>
</devices>
</network-data>
=== /now_playing ===
<?xml version="1.0" encoding="UTF-8" ?>
<nowPlaying deviceID="08DF1F132B9F" source="STANDBY">
<ContentItem source="STANDBY" isPresetable="false" />
</nowPlaying>
=== /presets ===
<?xml version="1.0" encoding="UTF-8" ?>
<presets>
<preset id="1" createdOn="0" updatedOn="0">
<ContentItem source="LOCAL_INTERNET_RADIO" type="stationurl" location="http://192.168.178.195:3000/preset/1.mp3" isPresetable="true">
<itemName>Hybrid Preset 1</itemName>
</ContentItem>
</preset>
<preset id="2" createdOn="0" updatedOn="0">
<ContentItem source="LOCAL_INTERNET_RADIO" type="stationurl" location="http://192.168.178.195:3000/preset/2.mp3" isPresetable="true">
<itemName>Hybrid Preset 2</itemName>
</ContentItem>
</preset>
<preset id="3" createdOn="0" updatedOn="0">
<ContentItem source="LOCAL_INTERNET_RADIO" type="stationurl" location="http://192.168.178.195:3000/preset/3.mp3" isPresetable="true">
<itemName>Hybrid Preset 3</itemName>
</ContentItem>
</preset>
<preset id="4" createdOn="0" updatedOn="0">
<ContentItem source="LOCAL_INTERNET_RADIO" type="stationurl" location="http://192.168.178.195:3000/preset/4.mp3" isPresetable="true">
<itemName>Hybrid Preset 4</itemName>
</ContentItem>
</preset>
<preset id="5" createdOn="0" updatedOn="0">
<ContentItem source="LOCAL_INTERNET_RADIO" type="stationurl" location="http://192.168.178.195:3000/preset/5.mp3" isPresetable="true">
<itemName>Hybrid Preset 5</itemName>
</ContentItem>
</preset>
<preset id="6" createdOn="0" updatedOn="0">
<ContentItem source="LOCAL_INTERNET_RADIO" type="stationurl" location="http://192.168.178.195:3000/preset/6.mp3" isPresetable="true">
<itemName>Hybrid Preset 6</itemName>
</ContentItem>
</preset>
</presets>
=== /sources ===
<?xml version="1.0" encoding="UTF-8" ?>
<sources deviceID="08DF1F132B9F">
<sourceItem source="AUX" status="READY" isLocal="true">AUX IN</sourceItem>
<sourceItem source="AIRPLAY" status="READY" />
<sourceItem source="NOTIFICATION" status="UNAVAILABLE" />
<sourceItem source="QPLAY" sourceAccount="QPlay1UserName" status="UNAVAILABLE">QPlay1UserName</sourceItem>
<sourceItem source="QPLAY" sourceAccount="QPlay2UserName" status="UNAVAILABLE">QPlay2UserName</sourceItem>
<sourceItem source="SPOTIFY" sourceAccount="SpotifyConnectUserName" status="UNAVAILABLE">SpotifyConnectUserName</sourceItem>
<sourceItem source="LOCAL_INTERNET_RADIO" status="READY" />
<sourceItem source="SPOTIFY" sourceAccount="SpotifyAlexaUserName" status="UNAVAILABLE">SpotifyAlexaUserName</sourceItem>
<sourceItem source="STORED_MUSIC_MEDIA_RENDERER" status="UNAVAILABLE">StoredMusicUserName</sourceItem>
<sourceItem source="UPNP" status="UNAVAILABLE">UPnPUserName</sourceItem>
<sourceItem source="ALEXA" status="READY" />
</sources>
=== /setup ===
<?xml version="1.0" encoding="UTF-8" ?>
<setupStateResponse state="SETUP_INACTIVE" systemstate="SETUP_LANG_SET" />
Everything is running perfectly now, so I would prefer not to cold‑boot the speaker again at the moment.
If you need anything else (logs, screenshots, config, timestamps, etc.) I can send all of that — just let me know.
As for what we did since yesterday:
No special steps — once the config files were in the correct place, everything suddenly started working exactly as expected. No additional reboots or changes.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: ***@***.***>
|
|
Will close discussion I have issue #22 that captures the other 2 users... |
|
Him. Very odd... The only thing I have running in background is the occasional ping to keep the MA connection alive. I'll double check that |
|
Here is the latest log. Unfortunately, it’s still not working on my side. 16:57:29] [INFO] =======================================================================
|
|
ok that an old version...can you update to the latest v3.6 it has a new yml and env. |
|
I successfully updated Hybrid to version 3.6 and confirmed that Preset 3 was working right after the update. [Boot] 💓 Executing scheduled Network Keep-Alive ping to Music Assistant... |
|
Hm.... do you still have the log on either side of that. You can extract it from the tools page. I want to see everything possible from startup to now...As much as you can see in the log. I just changed the provider settings to match UberBose/SoundCork) but maybe I need to go back to delivering the settings again. Send me the logs and I can make a v3.6.1 that reverses that last change to see if that solves the issue. |
|
I updated my system to Hybrid 3.6 and initially Preset 3 worked as expected. [09:26:25] [INFO] =======================================================================
|
|
What this the press that failed or is there something after Im looking for the log entry the shows the preset that failed... ,,, That why I always need the complete log from the very start of the application to the currnet end of the log.. (i changed the tools page to show 1000 lines) |
|
Ok, that fact that there is no log entry... I'm beginning to think this is an NVRAM persistence issue on the speaker itself, and not anything to do with a missing or broken Bose cloud handshake. A factory reset and re-applying the firmware override may solve salve the issue, However for v3.6.2 I'm going to have an internal "Preset Watchdog" for exactly this situation. So even though the nightly audit catches the issue and reboots the speaker to force the cloud handshake this will just force re-write the presets to a specific problematic speakers at a regular interval, without rebooting them. I get that out soon.. and show you where on the tools page to tag your speaker. If If presets still drop after we've had the watchdog running for a while, then we might have to try the factory reset and re-apply the firmware I also have the bypass cloud simulation beta that we can try too. Its an option on the tools page... But according to SoundCork the error if a preset is missing doesnt tell you the button number ...But I cant test that so we can try it and see what it says... but I think this v3.6.1 watchdog hopefully addresses the issue...it sure sounds like what other depelopers and solutions have run ito at times... |
|
This is what I am addiong to v3.6.2 I'll put out the pre-release tomorrow and let you know. Im also adding an option to the new feature to just observe and log the speakers memory and any communication evernt it sends out... It will write to a log in the logs folder se I can capture the instance it looses its presets...That way I can see what is going on . THis is diff then the console log... It will just record speaker state evey 5 minuites during the time in between it not playing....I want to trap the instance it drops the presets to see if it is really memory related or some other event happens that I can not see @Andreas221988 Ok v3.6.1 is available with the enhnaced debug logging I put in for your issues (and the temp preset repush code0. https://github.com/TJGigs/Bose-SoundTouch-Hybrid-2026/blob/main/bose-soundtouch-hybrid.yml
|
|
Install v3.6.4 Then when it happens again send me the watchdog log file from the /logs subdirectory and the normal console log |
|
I’ve now installed v3.6.2, but the startup log still shows v3.6.1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [12:12:10] [INFO] =======================================================================
|
|
I forgot to change that... v3.6.6 has been corrected and I added speaker audit to the preflight startup so with that it will be a good starting point baseline to make the speaker has its presets. then we can turn on the watchdog as I mentioned above to capture when the speaker loses it presets etc |
|
It’s running pretty well overall, but I just had an issue again — I’m attaching the log. [03:00:47] [INFO] =======================================================================
|
|
I added a detail watchdog log in v3.7
|
|
install v3.7.1 for fix.. |
















Uh oh!
There was an error while loading. Please reload this page.
Hi everyone,
I’m using the Bose SoundTouch Hybrid 2026 setup and I’m trying to assign a radio station (Bayern 3) to Hybrid Preset 3.
The station plays correctly through MASS (UPnP driver mode works, track metadata is available), but when I click on Preset 3 in the Remote Control UI, the preset menu does not appear. Instead, the UI stays locked with “Waiting for TRACK…” or “Loading…”.
TuneIn radio seems to report INVALID_SOURCE, so Hybrid cannot open the preset assignment dialog. MASS playback works and shows:
Source: UPNP
Provider: tunein
MASS is Driver: true
Track metadata available
My question:
What is the correct way to assign a radio stream (like Bayern 3) to Hybrid Preset 3?
Do I need to start the station exclusively through MASS before assigning it, or is there another required step to make the preset menu appear?
Any guidance would be appreciated.
Thanks!
All reactions