modify: ip音柱插件
This commit is contained in:
@@ -70,6 +70,41 @@ class _FileStream:
|
||||
assert self._file is not None, "必须在 with 上下文内使用"
|
||||
return self._file.seek(offset, whence)
|
||||
|
||||
# ============================================================
|
||||
# 辅助函数 - 播放 tts 语音
|
||||
# ============================================================
|
||||
|
||||
async def ip_sound_column_tts_play(zenoh_session, payload: dict) -> dict:
|
||||
"""
|
||||
播放 ip 音柱 tts 语音
|
||||
|
||||
可通过配置 ip_sound_column.enabled 关闭。失败时返回 {"command": ..., "result": -1}。
|
||||
|
||||
Args:
|
||||
zenoh_session: Zenoh 会话(用于调用 ip_sound_column Worker)
|
||||
payload: 请求体字典,包含 command / volume / play_count / queue / sync_response /
|
||||
play_interval / tts_pitch / tts_speed / tts_voice_name / tts_text
|
||||
"""
|
||||
from .global_var import ip_sound_column_enabled
|
||||
|
||||
if not ip_sound_column_enabled:
|
||||
logger.info("[TTS] ip_sound_column 播放已关闭 (ip_sound_column.enabled=false)")
|
||||
return {"command": payload.get("command", ""), "result": -1}
|
||||
|
||||
async with Client(session=zenoh_session, logger=logger) as client:
|
||||
try:
|
||||
result = await client.call(
|
||||
worker_type="ip_sound_column",
|
||||
subject="ip_sound_column.tts",
|
||||
method="POST",
|
||||
payload=payload,
|
||||
timeout=10.0,
|
||||
retries=1,
|
||||
)
|
||||
return result
|
||||
except Exception as e:
|
||||
logger.error(f"[TTS] ip_sound_column 调用失败: {type(e).__name__}: {e}")
|
||||
return {"command": payload.get("command", ""), "result": -1}
|
||||
|
||||
# ============================================================
|
||||
# 辅助函数 — 告警处理各步骤拆分为独立函数
|
||||
@@ -463,10 +498,29 @@ async def alarm_report(
|
||||
Result=AlarmReportResult(Code=0, Desc="Doubao 分析判定为 False,忽略告警")
|
||||
)
|
||||
|
||||
# 2. 写入本地数据库(按 AlarmId 去重 + 裁剪旧记录)
|
||||
from .global_var import ip_sound_column_volume
|
||||
|
||||
# 2. ip 音柱 TTS 播放(可通过配置开关关闭),失败时仅记录日志,不影响主流程
|
||||
tts_payload = {
|
||||
"command": "play_local_tts",
|
||||
"volume": ip_sound_column_volume,
|
||||
"play_count": 1,
|
||||
"queue": True,
|
||||
"sync_response": False,
|
||||
"play_interval": 2,
|
||||
"tts_pitch": 50,
|
||||
"tts_speed": 50,
|
||||
"tts_voice_name": "xiaoyan",
|
||||
"tts_text": f"告警: {full_data.get('Summary', '')}",
|
||||
}
|
||||
tts_result = await ip_sound_column_tts_play(request.app.state.zenoh_session, tts_payload)
|
||||
if tts_result.get("result") != 0:
|
||||
logger.warning(f"[AlarmReport] ip_sound_column TTS 播放失败: {tts_result}")
|
||||
|
||||
# 3. 写入本地数据库(按 AlarmId 去重 + 裁剪旧记录)
|
||||
await _save_alarm_record(full_data)
|
||||
|
||||
# 3. 转发外部平台(先上传视频,再上报)
|
||||
# 4. 转发外部平台(先上传视频,再上报)
|
||||
await _forward_alarm_to_external(full_data)
|
||||
|
||||
return AlarmReportResponse(
|
||||
|
||||
Reference in New Issue
Block a user