|
8 | 8 | from homeassistant.core import HomeAssistant, ServiceCall |
9 | 9 |
|
10 | 10 | from .const import ( |
| 11 | + CONF_API_KEY, |
11 | 12 | CONF_BEMFA_UID, |
12 | 13 | CONF_CHAT_MODEL, |
13 | 14 | CONF_CHAT_URL, |
|
21 | 22 | SERVICE_STT_TRANSCRIBE, |
22 | 23 | SERVICE_TRANSLATE_BLUEPRINTS, |
23 | 24 | SERVICE_TRANSLATE_COMPONENTS, |
24 | | - SERVICE_TTS_SPEECH, |
25 | | - SERVICE_TTS_STREAM, |
| 25 | + SERVICE_TTS_SAY, |
26 | 26 | ) |
27 | 27 | from .services_lib import ( |
28 | 28 | BLUEPRINTS_TRANSLATION_SCHEMA, |
|
32 | 32 | STT_SCHEMA, |
33 | 33 | TRANSLATION_SCHEMA, |
34 | 34 | TTS_SCHEMA, |
35 | | - TTS_STREAM_SCHEMA, |
36 | 35 | WECHAT_SCHEMA, |
37 | 36 | async_translate_all_blueprints, |
38 | 37 | async_translate_all_components, |
@@ -111,15 +110,16 @@ async def _handle_generate_image(call: ServiceCall) -> dict: |
111 | 110 | return {"success": False, "error": "API密钥未配置"} |
112 | 111 | return await handle_generate_image(hass, call, effective_key, image_url) |
113 | 112 |
|
114 | | - # ========== TTS 语音合成服务 ========== |
115 | | - async def _handle_tts_speech(call: ServiceCall) -> dict: |
116 | | - if not has_api_key(): |
117 | | - return {"success": False, "error": "API密钥未配置"} |
118 | | - return await handle_tts_speech(hass, call, api_key) |
119 | | - |
120 | | - # ========== TTS 流式语音服务 ========== |
121 | | - async def _handle_tts_stream(call: ServiceCall) -> dict: |
122 | | - return await handle_tts_stream(hass, call) |
| 113 | + # ========== TTS 语音合成服务(统一) ========== |
| 114 | + async def _handle_tts_say(call: ServiceCall) -> dict: |
| 115 | + """Handle TTS service with optional streaming support.""" |
| 116 | + stream = call.data.get("stream", False) |
| 117 | + if stream: |
| 118 | + return await handle_tts_stream(hass, call) |
| 119 | + else: |
| 120 | + if not has_api_key(): |
| 121 | + return {"success": False, "error": "API密钥未配置"} |
| 122 | + return await handle_tts_speech(hass, call, api_key) |
123 | 123 |
|
124 | 124 | # ========== STT 语音转文字服务 ========== |
125 | 125 | async def _handle_stt_transcribe(call: ServiceCall) -> dict: |
@@ -200,15 +200,10 @@ async def _handle_translate_blueprints(call: ServiceCall) -> dict: |
200 | 200 | ) |
201 | 201 |
|
202 | 202 | hass.services.async_register( |
203 | | - DOMAIN, SERVICE_TTS_SPEECH, _handle_tts_speech, |
| 203 | + DOMAIN, SERVICE_TTS_SAY, _handle_tts_say, |
204 | 204 | schema=vol.Schema(TTS_SCHEMA), supports_response=True |
205 | 205 | ) |
206 | 206 |
|
207 | | - hass.services.async_register( |
208 | | - DOMAIN, SERVICE_TTS_STREAM, _handle_tts_stream, |
209 | | - schema=vol.Schema(TTS_STREAM_SCHEMA), supports_response=True |
210 | | - ) |
211 | | - |
212 | 207 | hass.services.async_register( |
213 | 208 | DOMAIN, SERVICE_STT_TRANSCRIBE, _handle_stt_transcribe, |
214 | 209 | schema=vol.Schema(STT_SCHEMA), supports_response=True |
@@ -240,8 +235,7 @@ async def async_unload_services(hass: HomeAssistant) -> None: |
240 | 235 | """ |
241 | 236 | hass.services.async_remove(DOMAIN, SERVICE_ANALYZE_IMAGE) |
242 | 237 | hass.services.async_remove(DOMAIN, SERVICE_GENERATE_IMAGE) |
243 | | - hass.services.async_remove(DOMAIN, SERVICE_TTS_SPEECH) |
244 | | - hass.services.async_remove(DOMAIN, SERVICE_TTS_STREAM) |
| 238 | + hass.services.async_remove(DOMAIN, SERVICE_TTS_SAY) |
245 | 239 | hass.services.async_remove(DOMAIN, SERVICE_STT_TRANSCRIBE) |
246 | 240 | hass.services.async_remove(DOMAIN, SERVICE_SEND_WECHAT_MESSAGE) |
247 | 241 | hass.services.async_remove(DOMAIN, SERVICE_TRANSLATE_COMPONENTS) |
|
0 commit comments