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:
1 parent
8b060d7346
commit
7732be0de8
3 files changed
+19
-3
No files matched your search
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user