Devotd Github
새 소식개발 도구

dicklesworthstone/frankensonos — 다른 가계의 재생 시작 차단

frankensonos의 2026년 11월 2일 커밋 221f88ac은 검색으로 곡을 골라 재생할 때 지정된 가계가 현재 가계와 다르면 재생을 거절하도록 검색·재생 경로를 손봤다.

저장소 정보dicklesworthstone/frankensonos ↗

frankensonos의 2026년 11월 2일 커밋 221f88ac은 검색으로 곡을 골라 재생할 때 지정된 가계가 현재 가계와 다르면 재생을 거절하도록 검색·재생 경로를 손봤다.

GitHub 설명: Memory-safe Rust controller for your own Sonos speakers on your own LAN — reliable SSDP/UPnP-SOAP/GENA interoperability (S1 + S2), a Spotify-library classical DJ, and a CLI + HTTP API + MCP server so AI agents can run the house, including off-LAN over Tailscale.

스타
★ 89
포크
6
언어
Rust
라이선스
NOASSERTION
원문 보기 ↗GitHub에서 보기 ↗

dicklesworthstone/frankensonos는 Rust로 만든 메모리 안전한 Sonos 스피커 제어기다. 같은 LAN의 자사 스피커를 SSDP/UPnP-SOAP/GENA로 다루며, CLI와 HTTP API, MCP 서버를 함께 내세워 AI 에이전트가 집을 조작하게 한다. 2026년 11월 2일 커밋 221f88ac은 검색으로 곡을 골라 곧바로 재생하는 경로에 가계(household) 조건을 하나 더 붙였다.

가계는 이 코드에서 스피커의 구역 그룹(zone group) 구조에 따라 나뉘는 단위다. 재생 요청이 가계 id를 아예 담지 않은 경우와, 담았지만 현재 가계와 다른 경우를 구분해 검사한다. 없는 가계 id는 원래부터 거절했는데, 이번에는 존재하지만 다른 가계 id도 같은 방식으로 거절하고 NotReady 오류로 돌려준다. 같은 자리에는 스피커 재생 세대(generation)가 어긋났을 때의 검사도 남아 있어, 그 경우에도 재생은 시작되지 않는다. 결과적으로 검색으로 얻은 곡이 지금 재생 중인 집이 아닌 다른 집의 스피커에서 울리지 않는다.

구현은 crates/fsonos-api의 검색·재생 표면 파일과 시뮬레이션 테스트 파일 두 곳에서 28줄(+19/-9)만 바뀌었다. 테스트 쪽은 GetZoneGroupState로 읽은 구역 그룹 구조를 위치 정보 조회보다 먼저 반영해 가계 분할을 기준으로 재생 경로를 검사한다. 다만 커밋 메시지는 제품 테스트를 실행하지 않았다고 밝힌다. 실제 스피커와 여러 가계가 섞인 집에서의 동작은 이번 커밋으로 확인되지 않았으므로, 다중 가계 환경에 쓰려면 하드웨어 검증이 더 필요하다.