결론
- 실제 HA/Google Home 호출 없이 dry-run 전용 초안 2개 작성 완료.
- 신규 스크립트:
/Users/ron/.hermes/skills/smart-home/scripts/market_tts.py/Users/ron/.hermes/skills/smart-home/scripts/cron_failure_tts.py- 기본값은 모두 dry-run이며, 실제 음성 송출은
--execute를 명시해야만 수행된다. - 현재 HA endpoint가 불안정한 상태이므로, Phase 3 실제 실행은 HA URL 확정 후 진행해야 한다.
1. 현재 TTS 자산 전수
| 파일 | 입력 | 출력/동작 | HA API 의존 | Google Home/캐스트 의존 | 비고 |
|---|---|---|---|---|---|
google_home_tts.sh |
CLI 인자: text, volume, rate, voice | Edge TTS mp3 생성 → 임시 HTTP 서버 → 거실 Google Home 캐스트 | 없음 | 있음: 192.168.0.8:8009, pychromecast |
핵심 송출 래퍼. HA 없이 직접 캐스트 |
edge_tts_cast.py |
CLI 인자: text, voice, volume, rate | Edge TTS mp3 생성 → Google Home 캐스트 | 없음 | 있음: 192.168.0.8:8009, pychromecast |
Python판 직접 캐스트 |
tts_briefing.sh |
HA 날씨, yfinance, RSS, ops DB, LLM | 즉석 브리핑 문장 생성 후 google_home_tts.sh 호출 |
있음: HA_URL, ~/.hermes/secrets/ha_token |
간접 의존 | 날씨 실패는 pass, 시황/작업현황 조합 |
tts_morning.sh |
HA 날씨/조명/커튼, yfinance, RSS, ops DB, LLM, KBS stream | 아침 브리핑 TTS 후 라디오 재생 | 있음: 날씨 + 조명/커튼 서비스 호출 | 있음: TTS + Docker homeassistant 내부 캐스트 | 부작용 큼: 조명/커튼/라디오 포함 |
실측 요약:
file|lines|HA_URL|ha_token|google_home_tts|edge_tts|pychromecast|curl|docker|yfinance|llm
google_home_tts.sh|85|-|-|Y|Y|Y|-|-|-|-
edge_tts_cast.py|126|-|-|-|Y|Y|-|-|-|-
tts_briefing.sh|157|Y|Y|Y|-|-|-|-|Y|-
tts_morning.sh|241|Y|Y|Y|-|Y|Y|Y|Y|-
2. 신규 파이프라인 설계
2.1 market_tts.py
목적: analyst 4종 결과를 짧은 시장 음성 브리핑으로 합성.
읽는 파일:
/Users/ron/.hermes/workspace/memory/analyst-macro/latest.json/Users/ron/.hermes/workspace/memory/analyst-fundamental/latest.json/Users/ron/.hermes/workspace/memory/analyst-technical/latest.json/Users/ron/.hermes/workspace/memory/analyst-pm/latest.json
동작:
- 각 latest.json에서
data_date/as_of/generated_at/data_dates기준일 추출 summary/body/narrative/top3_signals계열에서 첫 핵심 문장 추출- 3~5문장 수준의 한국어 음성 브리핑 생성
- 기본은 dry-run 출력 +
/Users/ron/.hermes/logs/market_tts_last.json기록 --execute를 붙일 때만google_home_tts.sh호출
권장 크론 설계:
- 1차: 07:40, analyst 4종 완료 직후 짧은 시장 브리핑
- 2차: 09:40
morning_full_audit이후, 감사 결과까지 포함하는 확장 브리핑은 다음 단계에서 별도 옵션으로 연결
2.2 cron_failure_tts.py
목적: cron 실패 시 한 줄 음성 알림 생성.
동작:
--job-id,--error또는--source-file에서 실패 정보를 받음- 한 줄 메시지 생성:
크론 주의. {job} 실패. 원인: {error}. 로그 확인이 필요합니다. - 기본은 dry-run 출력 +
/Users/ron/.hermes/logs/cron_failure_tts_last.json기록 --execute를 붙일 때만google_home_tts.sh호출
권장 연결 방식:
- 독립 주기 크론보다 Hermes cron failure hook에서 호출하는 방식이 적합.
- 같은 실패가 반복될 수 있으므로 실제 운영 전 dedup/cooldown을 붙여야 한다.
- 예: 동일 job+error hash는 30~60분 내 재송출 금지.
3. 검증 결과
구문 검사:
python3 -m py_compile market_tts.py cron_failure_tts.py
# 통과
market_tts.py dry-run:
[DRY_RUN] TTS 호출 생략
시장 음성 브리핑입니다. 데이터 기준은 매크로 2026-04-24, 펀더멘탈 2026-04-24, 테크니컬 2026-04-24, 피엠 2026-04-24입니다. 매크로 판단은 🌍 매크로 브리핑 📌 헤드라인 WTI 96.49(2026-04-23 market-indicators) 기준. 펀더멘탈 판단은 오늘 신규 공시 6건을 우선 반영한다. 테크니컬 판단은 상승 우위: 지수는 동반 상승 쪽이나 주도축 강도 확인이 필요하다 (NDX 1.7%, SPY 1.0%, IWM 2.1%). 피엠 판단은 Recovery 유지와 반도체 리더십은 공격을 허용하지만, macro 전환 유보와 이벤트 리스크 때문에 '선별 적극'이 맞다. 이상입니다.
cron_failure_tts.py dry-run:
[DRY_RUN] TTS 호출 생략
크론 주의. sample-cron 실패. 원인: HTTP 500 sample failure. 로그 확인이 필요합니다.
증거 JSON:
/tmp/market_tts_test.json chars=340 execute=False
/tmp/cron_failure_tts_test.json chars=65 execute=False
4. 실제 운영 전 체크리스트
- HA/Google Home 실제 경로 확정
- 현재 핵심 송출은 HA가 아니라
google_home_tts.sh의 Google Home 직접 캐스트 경로. - 대상 IP
192.168.0.8:8009와 로컬 HTTP 포트18793접근성 확인 필요. - safe-time 1회 수동 실행
market_tts.py --execute를 낮 시간에 1회만 실행.- 볼륨 0.35~0.42 권장.
- 실패 알림 cooldown 추가
cron_failure_tts.py는 실제 hook 연결 전 dedup/cooldown 필요.- Hermes jobs.json 등록
- 07:40
market_tts.py --execute - cron failure hook은 독립 스케줄이 아니라 실패 이벤트에서 호출.
5. 자체평가
- 정확성: 4.5/5 — 요청한 전수 조사, 신규 초안, dry-run 검증 완료. 실제 HA 호출은 의도적으로 하지 않음.
- 완성도: 4.3/5 — 운영 투입 가능한 초안이나 cron failure cooldown은 다음 단계로 남김.
- 검증: 4.5/5 — py_compile + dry-run + JSON 증거 확인.
- 최소 변경: 4.8/5 — 신규 파일 2개와 보고서만 생성, 기존 TTS/HA 자산 미수정.
종합: 4.5/5
DONE