Output only satellite (#182)

Output only satellite for nodes with only speakers and no microphone.
Supports announcements and playing media only.

---------

Co-authored-by: Florian Asche <github@florian-asche.de>
This commit is contained in:
JaminandFlorian Asche authored and GitHub committed 2026-03-31 01:56:16 +02:00
1 parent 8b060d7346
commit 7732be0de8
3 files changed
+19 -3

No files matched your search

+6
View File
@@ -156,6 +156,11 @@ async def main() -> None:
action="store_true",
help="Add this to enable debug logging",
)
parser.add_argument(
"--output-only",
action="store_true",
help="Enable output only mode (Satellite supports announcements only)",
)
args = parser.parse_args()
if args.list_input_devices:
@@ -351,6 +356,7 @@ async def main() -> None:
preferences=preferences,
preferences_path=preferences_path,
refractory_seconds=args.refractory_seconds,
output_only=args.output_only,
download_dir=args.download_dir,
volume=initial_volume,
timer_max_ring_seconds=args.timer_max_ring_seconds,
+1
View File
@@ -94,6 +94,7 @@ class ServerState:
wake_words_changed: bool = False
refractory_seconds: float = 2.0
thinking_sound_enabled: bool = False
output_only: bool = False
muted: bool = False
connected: bool = False
volume: float = 1.0
+12 -3
View File
@@ -63,7 +63,18 @@ class VoiceSatelliteProtocol(APIServer):
self.state.satellite = self
self.state.connected = False
# Report capabilities appropriately
if state.output_only:
_LOGGER.debug("Output only features")
self.supported_features = VoiceAssistantFeature.API_AUDIO | VoiceAssistantFeature.ANNOUNCE
else:
_LOGGER.debug("Voice assistant features")
self.supported_features = (
VoiceAssistantFeature.VOICE_ASSISTANT | VoiceAssistantFeature.API_AUDIO | VoiceAssistantFeature.ANNOUNCE | VoiceAssistantFeature.START_CONVERSATION | VoiceAssistantFeature.TIMERS
)
existing_media_players = [entity for entity in self.state.entities if isinstance(entity, MediaPlayerEntity)]
if existing_media_players:
# Keep the first instance and remove any extras.
self.state.media_player_entity = existing_media_players[0]
@@ -287,9 +298,7 @@ class VoiceSatelliteProtocol(APIServer):
mac_address=self.state.mac_address,
manufacturer="Open Home Foundation",
model="Linux Voice Assistant",
voice_assistant_feature_flags=(
VoiceAssistantFeature.VOICE_ASSISTANT | VoiceAssistantFeature.API_AUDIO | VoiceAssistantFeature.ANNOUNCE | VoiceAssistantFeature.START_CONVERSATION | VoiceAssistantFeature.TIMERS
),
voice_assistant_feature_flags=self.supported_features,
)
elif isinstance(
msg,