Local Home SDK는 스마트 홈 인텐트를 라우팅하는 로컬 처리 경로를 추가하여 스마트 홈과 Google 어시스턴트의 통합을 개선합니다.
Local Home SDK는 로컬 실행 및 로컬 쿼리라는 두 가지 기능을 제공합니다.
- 로컬 실행은 클라우드 API를 호출하는 대신 로컬 처리 경로를 통해
EXEC
인텐트를 전송하여 명령어를 처리하는 기능을 제공합니다. 예를 들어 '불 켜 줘'라는 요청은 로컬 실행에서 처리할 수 있습니다. - 로컬 쿼리는 로컬 처리 경로를 통해
QUERY
인텐트를 전송하여 기기 상태와 관련된 쿼리를 처리하는 기능을 제공합니다. 예를 들어 로컬 쿼리는 클라우드 API를 호출하지 않고 '불이 켜져 있나요?'라는 쿼리를 처리합니다.
이 SDK를 사용하면 TypeScript 또는 JavaScript로 스마트 홈 비즈니스 로직이 포함된 로컬 처리 앱을 작성할 수 있습니다. Google Home 또는 Google Nest 기기는 기기에서 앱을 로드하고 실행할 수 있습니다. 앱은 근거리 통신망 (LAN)의 Wi-Fi를 통해 기존 스마트 기기와 직접 통신하여 기존 프로토콜을 통해 사용자 명령을 실행합니다.
SDK를 통합하면 지연 시간이 단축되고 안정성이 향상되는 등 Cloud-to-cloud 통합의 성능이 개선됩니다. 보조 사용자 인증을 사용하는 기기를 제외한 모든 기기 유형 및 기기 트레잇에 로컬 처리가 지원됩니다.
작동 원리 이해
클라우드 처리에서 SYNC
응답을 받은 후 Local Home 플랫폼은 mDNS, UDP 브로드캐스트 또는 UPnP를 사용하여 사용자의 근거리 통신망을 스캔하여 어시스턴트에 연결된 스마트 기기를 찾습니다.
플랫폼은 IDENTIFY
응답의 기기 ID를 이전 SYNC
응답에서 반환된 기기 ID와 비교하여 기기를 로컬에서 제어할 수 있는지 확인하기 위해 IDENTIFY
인텐트를 전송합니다. 감지된 기기가 허브 또는 브리지인 경우 플랫폼은 REACHABLE_DEVICES
인텐트를 전송하고 허브를 로컬 통신을 위한 프록시 기기로 취급합니다.
로컬 기기를 확인하는 응답을 수신하면 플랫폼은 사용자의 Google Home 또는 Google Nest 기기로의 로컬 처리 경로를 설정하고 이후 로컬 처리를 위한 사용자 명령어를 라우팅합니다.
사용자가 로컬 처리 경로가 있는 Cloud-to-cloud 통합을 트리거하면 어시스턴트는 클라우드 처리가 아닌 Google Home 또는 Google Nest 기기에 EXECUTE
인텐트 또는 QUERY
인텐트를 전송합니다. 그러면 기기가 로컬 처리 앱을 실행하여 인텐트를 처리합니다.
로컬 Home 플랫폼은 명령을 트리거할 Google Home 또는 Google Nest 기기를 선택할 때 비결정론적입니다. EXECUTE
및 QUERY
인텐트는 대상 기기와 동일한 Home Graph 구조에 정의된 모든 Google Home 또는 Google Nest 기기를 통해 수신될 수 있습니다.
로컬 처리 앱
로컬 처리 앱에는 로컬 Home 플랫폼에서 전송한 인텐트를 처리하고 근거리 통신망을 통해 스마트 기기에 액세스하는 비즈니스 로직이 포함되어 있습니다. 로컬 처리를 통합하기 위해 하드웨어를 수정할 필요는 없습니다. 앱은 HTTP, TCP, UDP 등의 애플리케이션 레이어 프로토콜을 통해 스마트 기기에 제어 명령을 전송하여 Cloud-to-cloud 통합 요청을 처리합니다. 로컬 처리 경로가 실패하면 클라우드 처리가 대체 실행 경로로 사용됩니다.
앱 빌드를 지원하기 위해 Local Home SDK는 다음 두 가지 기본 클래스를 제공합니다.
DeviceManager
: TCP, UDP 소켓 또는 HTTP 요청을 사용하여 스마트 기기와 통신하는 메서드를 제공합니다.App
: 로컬에서 제어 가능한 기기 (IDENTIFY
,REACHABLE_DEVICES
)를 검색한 후 Google에서 전송하는 인텐트의 핸들러를 연결하는 메서드를 제공합니다. 이 클래스는 사용자 명령어 (EXECUTE
)도 실행하고 현재 기기 상태에 관한 사용자 쿼리 (QUERY
)에 응답합니다.
개발 중에는 자체 호스팅 서버 또는 로컬 개발 머신에 앱을 로드하여 앱을 빌드하고 테스트할 수 있습니다. 프로덕션에서는 Google이 사용자의 Google Home 또는 Google Nest 기기에서 안전한 JavaScript 샌드박스 환경에 앱을 호스팅합니다.
Report State API는 현재 로컬 처리에는 지원되지 않습니다. Google은 이러한 요청을 처리하기 위해 판매자의 클라우드 처리를 사용합니다.
애플리케이션 수명 주기
로컬 처리 앱은 Local Home 플랫폼이 프로젝트 스캔 구성과 일치하는 새 로컬 기기를 감지하거나 이전에 식별된 기기와 관련하여 전송할 대기 중인 인텐트가 있는 경우 필요에 따라 로드됩니다.
Google Home 또는 Google Nest 기기는 메모리가 제한되어 있으며 시스템의 메모리 부족으로 인해 언제든지 로컬 처리 앱이 종료될 수 있습니다. 이는 앱이 너무 많은 메모리를 사용하기 시작하거나 시스템에서 다른 앱을 위한 공간을 확보해야 하는 경우에 발생할 수 있습니다. 로컬 홈 플랫폼은 전송할 새로운 인텐트가 있고 앱을 실행하기에 충분한 메모리 리소스가 있는 경우에만 앱을 다시 시작합니다.
로컬 홈 플랫폼은 사용자가 계정을 연결 해제하거나 사용자의 agentUserId
와 연결된 로컬 처리를 지원하는 기기가 더 이상 없을 때 유휴 시간 제한 후 앱을 언로드합니다.
지원되는 기기
Local Home 플랫폼은 지원되는 Google Home 또는 Google Nest 기기에서 로컬 처리 앱을 실행합니다. 다음 표에서는 지원되는 기기와 각 기기에서 사용되는 런타임을 설명합니다. 런타임 요구사항에 관한 자세한 내용은 실행 환경을 참고하세요.
기기 | 유형 | 환경 |
---|---|---|
Google Home | 발표자 | Chrome |
Google Home Mini | 발표자 | Chrome |
Google Home Max | 발표자 | Chrome |
Nest Mini | 발표자 | Chrome |
Nest Hub | 디스플레이 | Chrome |
Nest Hub Max | 디스플레이 | Chrome |
Nest Wifi | 라우터 | Node.js |
점 | Chrome |
실행 환경
로컬 처리 앱의 실행 환경은 기기에 따라 다릅니다. Local Home 플랫폼은 다음과 같은 런타임 환경을 지원합니다.
- Chrome: 로컬 처리 앱은 ECMAScript 버전 ES2018을 지원하는 Chrome M80 이상을 실행하는 Chrome 브라우저
window
의 컨텍스트 내에서 실행됩니다. - Node.js: 로컬 처리 앱은 ECMAScript 버전 ES2018을 지원하는 Node v10.x LTS 이상을 실행하는 Node.js 프로세스 내에서 스크립트로 실행됩니다.
소스 코드 구조
Local Home SDK에서 제공하는 번들러 구성을 사용하여 종속 항목을 단일 JavaScript 파일로 번들로 묶고 소스 코드를 즉시 호출 함수 표현식(IIFE)으로 패키징하는 것이 좋습니다.
구현 경로
스마트 홈 통합에 Local Home SDK를 활용하려면 다음 작업을 실행해야 합니다.
1 | 스캔 구성 설정 | 어시스턴트가 로컬에서 제어 가능한 기기를 검색하는 데 필요한 매개변수를 사용하여 Google Home Developer Console를 구성합니다. |
2 | 클라우드 처리에서 SYNC 응답 업데이트 | 클라우드 처리에서 플랫폼이 로컬 처리 경로를 설정하는 데 사용하는
otherDeviceIds 필드를 지원하도록 SYNC 요청 핸들러를 수정합니다. 이 필드에 로컬에서 제어할 수 있는 기기의 ID를 지정합니다.
|
3 | 로컬 처리 앱 구현 | 로컬 홈 SDK를 사용하여 IDENTIFY ,
EXECUTE ,
QUERY 인텐트를 처리하는 JavaScript 앱을 만듭니다. 허브 또는 브리지 프록시 기기의 경우 REACHABLE_DEVICES 인텐트도 처리해야 합니다.
|
4 | 앱 테스트 및 디버그 | Google Home 테스트 모음을 사용하여 통합을 테스트하거나 자체 인증합니다. |
시작하기 전에
- Cloud-to-cloud 통합 만들기의 기본사항을 숙지하세요.
- Google Home Developer Console에서 기존 스마트 홈 프로젝트가 있고 계정 연결이 구성되었는지 확인합니다.
- 테스트 기기의 Developer Console 및 어시스턴트에 동일한 Google 계정으로 로그인했는지 확인합니다.
- 앱을 작성하려면 Node.js 환경이 필요합니다. Node.js와 npm을 설치하려면 노드 버전 관리자를 사용하는 것이 좋습니다.
- 최신 버전의 Local Home SDK를 사용하려면 테스트 기기를 Cast 미리보기 프로그램에 등록해야 합니다.