home-assistant/core · warning · BrowseError
Media not found: {media_content_type} / {media_content_id}
Error message
Media not found: {media_content_type} / {media_content_id} What it means
BrowseError raised in arcam_fmj async_browse_media when the websocket media browser is asked for anything other than the root node. The integration only exposes a flat root listing of tuner presets, so any non-root media_content_id is 'not found'.
Source
Thrown at homeassistant/components/arcam_fmj/media_player.py:164
else:
_LOGGER.debug("Firing event to turn on device")
self.hass.bus.async_fire(EVENT_TURN_ON, {ATTR_ENTITY_ID: self.entity_id})
@convert_exception
@override
async def async_turn_off(self) -> None:
"""Turn the media player off."""
await self._state.set_power(False)
@override
async def async_browse_media(
self,
media_content_type: MediaType | str | None = None,
media_content_id: str | None = None,
) -> BrowseMedia:
"""Implement the websocket media browsing helper."""
if media_content_id not in (None, "root"):
raise BrowseError(
f"Media not found: {media_content_type} / {media_content_id}"
)
presets = self._state.get_preset_details()
radio = [
BrowseMedia(
title=preset.name,
media_class=MediaClass.MUSIC,
media_content_id=f"preset:{preset.index}",
media_content_type=MediaType.MUSIC,
can_play=True,
can_expand=False,
)
for preset in presets.values()
]
return BrowseMedia(View on GitHub (pinned to 58a3fdb3ea)
Solutions
- Browse only the root node; presets are playable leaf items (media_content_id 'preset:N'), not browsable folders.
- Clear the media browser cache / reload the dashboard if it resubmits stale ids.
- If you need hierarchy, handle it client-side rather than asking the integration to browse non-root ids.
Defensive patterns
Strategy: validation
Validate before calling
def is_browsable(media_content_id: str | None) -> bool:
return media_content_id in (None, "root") Try / catch
Catch BrowseError in media browser clients and fall back to browsing the root node ('root'/None), since presets are leaves. Prevention
- Treat this integration's browse tree as flat: only root is browsable.
- Use browse results only to populate play actions, never re-browse leaf ids.
- Clear stale media browser caches after integration reloads.
When it happens
Trigger: A media browser request arrives with media_content_id not in (None, 'root') - e.g. a client drilling into a preset or passing a stale 'preset:N' id as a browse target instead of a play target.
Common situations: Frontend or custom Lovelace media-browser card that tries to expand children; cached browse state referencing an id after integration reload changed preset indices.
Related errors
AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14).
Data as JSON: /api/errors/4c8041f6a82a4c7d.
Report an issue: GitHub.