Samsung SmartThings Find 비공식(역공학) 연동을 Home Assistant에서 쓰기 위한 커스텀 통합입니다.
원본 프로젝트(Vedeneb/HA-SmartThings-Find)를 기반으로, 현재 삼성 로그인 흐름 변경으로 QR 로그인이 사라진 상태에 맞춰 브라우저 쿠키(Cookie header) 수동 입력 방식으로 포크/수정한 버전입니다.
⚠️ 주의: 공식 API가 아닙니다. 삼성 웹/백엔드 변경으로 언제든 동작이 깨질 수 있습니다.
기기마다 아래 엔티티가 생성됩니다. (기기 타입/계정 상태에 따라 일부는 미지원일 수 있습니다)
- Device Tracker: 기기 위치(GPS)
- Sensor
- 배터리(가능한 기기만 / 특히 이어버드는 안 나오는 경우가 많습니다)
- Last update(서버가 보고한 gps_date 기반)
- Button
- Ring(벨 울리기) 요청
- Stop Ring(벨 중지) (기기/타입에 따라 미지원일 수 있음)
- Update Location(위치 업데이트 요청) (Active 모드가 켜져 있을 때 효과가 큼)
ℹ️ 참고: 이 통합은 SmartTag 물리 버튼(실물 클릭) 이벤트를 받을 수 없습니다.
SmartThings Find 웹사이트가 제공하는 기능 범위에서만 동작합니다.
아래 버튼을 누르면, Home Assistant에서 HACS 커스텀 레포 추가 화면으로 이동합니다.
- HACS → Integrations → 우측 상단 ⋮ → Custom repositories
- Repository:
https://github.com/1bobby-git/HA-SmartThings-Find - Category: Integration
- 설치 후 Home Assistant 재시작
통합 추가 화면으로 바로 이동하는 버튼입니다.
현재는 QR 로그인 엔드포인트가 동작하지 않는 경우가 많아, 브라우저에서 로그인한 세션 쿠키를 그대로 붙여넣는 방식으로 인증합니다.
- 브라우저에서
https://smartthingsfind.samsung.com/로그인 - 개발자도구(F12) → Network
- 페이지 새로고침(Refresh)
- 요청 목록에서
chkLogin.do클릭 - Request Headers →
Cookie:라인을 통째로 복사 - Home Assistant → 설정 → 디바이스 및 서비스 → 통합 추가 → SmartThings Find
→ 입력창에 Cookie 줄 전체 붙여넣기
✅ 팁:
JSESSIONID만 넣으면 실패할 수 있습니다.
가능하면chkLogin.do요청의 Cookie 헤더 전체를 넣어주세요.
SmartThings Find 웹 세션은 시간이 지나면 만료될 수 있습니다.
만료되면 엔티티가 [사용 불가]/Unavailable로 바뀌거나, 로그에 chkLogin.do ... body='fail' 같은 인증 실패가 나타날 수 있습니다.
- 세션이 만료되면 Home Assistant가 통합을 재인증 필요 상태로 전환할 수 있습니다.
- 이 경우 통합 화면에서 재구성/재인증을 통해 새 쿠키를 다시 넣어주세요.
🔐 보안: 쿠키는 계정 인증 정보입니다. 로그/이슈에 그대로 올리지 마세요.
일부 환경에서는 몇 시간 후 세션이 만료되어 기기가 Unavailable이 되는 경우가 있습니다.
이를 완화하기 위해, 통합은 KeepAlive를 통해 주기적으로 SmartThings Find 웹 엔드포인트를 호출해 세션을 유지하려고 시도합니다.
- KeepAlive는 완전한 보장을 하지는 않습니다(삼성 정책/변경에 따라 달라질 수 있음).
- 그래도 일반적으로 “idle 로그아웃” 유형에는 도움이 됩니다.
- KeepAlive 동작 중 쿠키가 회전(Set-Cookie) 될 수 있어, 가능하면 최신 쿠키를 entry에 저장해 유지합니다.
옵션 화면에서 SmartTag와 기타 기기(폰/워치/이어버드 등)에 대해 Passive / Active 동작을 선택할 수 있습니다.
-
Passive(패시브)
서버에 마지막으로 보고된 위치만 조회합니다. (배터리 영향이 적음) -
Active(액티브)
조회 전에 위치 업데이트 요청을 보내 최신 위치를 유도합니다. (정확도/즉시성 ↑, 배터리 영향 ↑)
참고: 기타 기기(폰/워치 등)는 Active 요청이 배터리/상태에 영향을 줄 수 있어, SmartTag와 분리해 둡니다.
Home Assistant → 통합 → SmartThings Find → 옵션(Configure)
옵션 화면에는 아래 항목이 표시됩니다(스크린샷 예시처럼 입력창 2개 + 드롭다운 2개):
- 업데이트 간격(초)
- 키:
update_interval - 위치/배터리 정보를 갱신하는 기본 폴링 주기입니다.
- KeepAlive interval(초)
- 키:
keepalive_interval - 세션 유지(KeepAlive) 호출 주기입니다.
- 추천 시작값: 300초(5분)
- 여전히 만료되면: 120초(2분)로 낮춰 테스트
- SmartTag (드롭다운: Passive / Active)
- 저장 값:
passive또는active - SmartTag에만 적용되는 모드입니다.
- 기타 기기(폰/워치/이어버드 등) (드롭다운: Passive / Active)
- 저장 값:
passive또는active - SmartTag가 아닌 기기(휴대폰, 워치, 이어버드 등)에 적용되는 모드입니다.
- “Ring”은 주변의 갤럭시 기기(폰/태블릿)가 BLE로 태그에 전달하는 구조라, 주변에 연결 기기가 없으면 실패할 수 있습니다.
- 기기 종류에 따라 위치/배터리 정보가 항상 오지 않을 수 있습니다.
- SmartThings 모바일 앱과 웹사이트 동작이 100% 동일하지 않을 수 있습니다. 가능하면 웹사이트에서 먼저 테스트하세요.
- 비공식 통합이라 삼성 측 변경에 취약합니다.
- 쿠키 만료 가능성이 큽니다 → 새 쿠키로 재인증(reauth)
- KeepAlive 간격을 줄여보세요(예: 300 → 120)
- SmartThings Find 웹사이트에서 같은 계정/기기로 정상 조회되는지 확인
- 일부 기기는 웹에서 배터리를 제공하지 않습니다(특히 이어버드)
- 주변에 중계할 Galaxy 기기가 없으면 실패할 수 있습니다
- 웹사이트에서 Ring이 되는지 먼저 확인
configuration.yaml에 추가 후 재시작:
logger:
default: info
logs:
custom_components.smartthings_find: debug- Original upstream:
Vedeneb/HA-SmartThings-Find(archived / read-only)
