2019년 12월 9일 월요일

[번역] Fulfillment and authentication - Google Assistant - Action on Google

Fulfillment and authentication (이행 과 인증)

Fulfillment (이행, 수행)

Fulfillment는, smart home intent 에 대해 동적으로 응답을 생성할 수 있는, 웹 후크로 배포되는 코드이다. Google Assistant와 사용자 conversation 동안, fullfillment는 Google의 자연어 처리 프로세스에서 추출한 정보를 사용하여, 백엔드에서 조명켜기와 같은 동적 응답을 생성하거나, 조치를 트리거(시작)할 수 있다.

Fulfillment는 Assistant의 요청을 수신하고, 요청을 처리하고 응답한다.  이 back and-forth 요청과 응답 프로세스는 결국 초기 사용자 요구를 fulfill(이행)할 때까지, conversation을 할 수 있도록 이끈다. 대부분의 경우, 사용자는 'Hay Google, turn on my light.' 처럼 단순 Google Assistant와 단순 스마트홈 interaction(상호작용)한다.  하지만, two-factor authentication을 구현해야한다면, fulfillment는 'Hay Google, unlock my front door.'와 같은 Google Assistant에게 특수 요청 이후, PIN 인증을 요청하는것 처럼, 다중 요청과 응답을 처리해야할 수도 있다.

그림1은 스마트홈 EXECUTE intent의 정상적인 fulfillment와 execution을 보여준다.






Authentication (인증, 입증)

Authentication을 통해서, 사용자의 Google 계정을 인증 시스템의 사용자 계정과 연결할 수 있다. 이것은 fulfillment 위에 스마트홈 intent를 수신하면. 사용자 식별이 가능하도록 한다.  Google smart home은 authorization code flow의 OAuth만 지원한다.

Smart home의 경우, authorization 과 token exchange endpoint 두개의 endpoint가 필요한 authorization code flow의 OAuth를 사용해야한다. account linking with OAuth 참조

사용자를 인증하면, 스마트홈 intent가 fulfillment를 전송할 때, Authorization header에 사용자의 타사 OAuth2 access token이 전송된다.  모든 사용자는 장치정보가 Assistant에게 action.devices.SYNC intent와 함께 전송되기 때문에, account linking을 수행 해야만한다.

스마트홈 Action은 동일한 사용자 계정에 연결하는 여러 Google 사용자를 지원할것으로 예상된다(예: 사용자가 집안의 다른 사용자에게 액세스 권한을 부여할 때). 서비스에서 여러 사용자 연결을 지원할 수 없는 경우, 계정 연결 시, 오류가 발생해야한다.

2019년 12월 8일 일요일

[번역]Account linking with Google Sign-In - Google Assistant - Action on Google

Google Sign-In 으로 계정 연결하기

원문그대로 번역했으나, 화면이 현재 화면과 다름. 내용만 참조할 것.

Assistant 의 Google Sign-in은 사용자와 개발자 모두에게 Account linking 과 Account creation하기 가장 단순하고 쉬운 사용자환경을 제공한다. Action은 conversation 동안, 사용자명, 이메일, 프로필사진 등의 사용자의 구글 프로필정보 에 접근을 요청할 수 있다.
프로필 정보는 Action에서 개인화된 user experience 를 만드는데 사용될 수 있다.  만약, 다른 플랫폼용 앱이 있고, Google Sigh-In을 사용하면, 그 시스템에 기존 사용자 계정을 찾아 연결 가능하고, 새 계정 생성 또는 직접 communication 채널을 만드는것도 가능해진다.
Google Sign-In 으로 Account linking을 수행하기 위해선, 사용자에게 Google 프로필 접근 허용 동의를 요청한다.그런 다음, 시스템에서 사용자를 식별하여 프로필 정보(예:이메일 주소)를 사용한다.

Google Sign-In account linking 구현

아래 섹션의 단계에 따라 Action에 Google Sign-In account linking을 추가한다.

note : 금융 관련 계정 연결은 작업 검토에 6주 소요되므로, 릴리즈 계획에 시간 고려 필요.금융 서비스 정책 참조

프로젝트 설정

Google Sign-In account linking 을 사용하도록 프로젝트를 설정하려면, 아래 단계를 따름.

  1. Action Console을 열고 프로젝트를 선택
  2. Develop 탭을 클릭해서, Account Linking을 선택
  3. Account Creation에서 'Yes, allow users to sign up for new accounts via voice' 선택
  4. Linking type에서 'Google Sign In' 을 선택
  5. Client Information을 열고, Client ID issued by Google to your Actions 항목 값을 메모
  6. Save 클릭

인증 flow 시작

주의 : Action의 conversation 시작 시, 계정 연결 요청하지 말것.  대신에, 인증되지 않은 사용자에게 게스트 flow를 제공하여, Action의 작동 방식을 보여준 후에, 진행이 필요한경우에만 Account linking 을 요청할것.  계정문제때문에 사용자가 떠나는 경우가 지속적으로 발생하게되면, 구글은 Action을 적극적으로 홍보하지 않기 때문에, Action 사용자 트래픽이 감소하게됨.
인증된 사용자만 Account linking을 수행할 수 있음. Guest의 경우, account linking은 실패함.  게스트 사용자 처리와 인증에 관한 내용 살펴볼것.

인증 flow를 시작하려면, Account Sign-in helper intent 를 사용함.

사용자가 Action이 Google 프로필에 접근할 수 있는 권한 부여 후, 액션에 대한 모든 후속요청에, 사용자의 Google 프로필 정보가 포함된 Google ID 토큰을 받게 된다.
사용자의 프로필 정보에 접근하려면, 먼저, 다음을 수행하여 토큰의 유효성점검과 디코드를 수행한다.

  1. 해당 언어에 맞는 JWT-decoding library 를 사용하여 토큰을 해독하고, Google의 공개키(JWK or PEM 형식으로 제공)를 사용하여 토큰의 서명을 확인한다.
  2. 토큰의 발행자(decoded token에 iis 필드)가 https://accounts.google.com 이고,  audience (decoded token에 aud  필드)가 Action on Google consol의 해당 프로젝트에서 발행된 Client ID issued by Google to your Actions 값인지 확인하라. 
샘플 코드는 상단 원본 링크에서 확인..

Actions on Google client library for Node.js 또는 the Java client library를 사용한다면, 프로파일 컨텐츠에 접근 권한 부여 등의 작업에서, 할당된 토큰을 디코드 또는 유효성 검증에 주의 해야한다. 아래 code snippets(코드 요약 예) 가 있다. 아래 JSON은 각각 Dialogflow와 Actions SDK의 webhook 요청을 설명한다.

다음 스니펫은 로그인에 Dialogflow을 사용한다.
샘플 코드는 상단 원본 링크에서 확인..

다음 스니펫은 로그인에 Actions SDK를 사용한다.
샘플 코드는 상단 원본 링크에서 확인..

Handle data access requests (데이터 접근 요청 처리)

데이터 접근 요청을 처리하려면 Google ID 토큰이 제시한 사용자가 DB에 먼저 등록되어있어야 한다. 아래 스니펫은 사용자 계정이 이미 Firestore 데이터베이스에 있는지 확인하는 방법 예시임.
샘플 코드는 상단 원본 링크에서 확인..






[번역]Account linking - Google Assistant - Action on Google

Account Linking

Note: Account Linking 을 활성화 하는 Action은 Android(Go 에디션) 기기에서 현재 사용할 수 없다.

Account linking 을 통해서 구글 계정을 인증 시스템의 사용자 계정과 연결할 수 있다. 이를 통해서 사용자에게 풍부한 경험을 제공할 수 있다. 예를 들어, 사용자의 음식, 또는 음악 기본 설정, 거래 내역 및 기타 개인화 된 경험을 제공하는 데 사용할 수 있는 기타 정보를 저장할 수 있다.

Action이 다른 플랫폼 (웹 또는 Android)을 사용하는 기존 앱인 경우, Account linking 을 사용하여 모든 플랫폼에서 사용자가 기본 설정을 안전하게 사용할 수 있으므로, 일관된 크로스-플랫폼 환경이 보장된다.

Action on Google 에서 Account Linking은 Google Sign-In 을 사용하는데, 이것은 Google의 보안 인증 시스템 이고, 옵션으로, 업계 표준 프로토콜인 OAuth 2.0을 지원한다.

Account Linking 흐름 이해

Assistant 가 Google 계정을 사용자와 일치 시키면, account linking으로 해당 Google 계정에 액세스할 수 있는 권한을 사용자에게 요청할 수 있다.  계정 데이터를 사용하여 다음을 수행할 수 있다.

  • 사용자가 이미 다른 플랫폼에서 Action 또는 앱 중 하나를 사용할 때, 인증 시스템에서 계정과 일치하는 항목을 찾는 경우
  • 인증 시스템에서 새 사용자의 새 계정을 만들 경우

Action on Google은 세가지 계정 연결 타입을 제공한다.

Google Sign-in (구글 로그인)

Assistant 에서 Google Sign-in으로 Action이 Google profile의 사용자명, 이메일, 프로필 사진 등을 conversation 하는 동안 요청할 수 있다. 사용자는 음성으로 모든 작업이 가능하기 때문에, 자연스럽게 로그인할 수 있다.

이 유형의 Account linking은 다음의 경우 권장된다.

  • 기존 인증 시스템이 없다
  • 기존 인증 시스템이 있으나, @gmail.com 을 사용한 사용자만 연결한다.
자세한 내용은 Google Sign-In developer guide 를 참조.

OAuth and Google Sign-In

OAuth and Google Sign-in 링크 형식은 OAuth 기반 계정 연결 위에 Google Sign-In 을 추가한것이다. Google 사용자들에게 구글 이외의 인증 서비스를 활성화 하고자할 때, 완벽한 음성 기반 연결을 제공한다.
이 기능은, OAuth2 표준 흐름을 지원을 확장하여, Google 독점 extension 프로토콜을 추가 지원할 수 있도록 한다.

  • Google profile 정보를 사용한 완벽한 연결
  • Google profile 정보를 사용한 완벽한 계정 생성(optional)

이 형식의 account liinking은, 기존 인증 시스템이 있고, 사용자가 @gmail.com 이외의 주소에 연결할 수 있게 해야할 때 권장되는 형식이다.

OAuth

OAuth account linking 형식은, OAuthe 2.0 flow의 두 표준인 implicit 및 authorization code flow를 지원한다.

이 flow는 사용자 interaction을 음성에서 화면으로 이동해야하기 때문에 비추한다. 만약, oAuth2 서버가 있고, token exchange endpoint를 구글 자동 링킹 및 계정 생성용 ID token 프로토콜로 확장할 수 없을 때, 이 flow 사용을 고려하라.

추가 정보는 OAuth developer guide 참조.


2019년 12월 6일 금요일

[번역]Account linking with OAuth [Implicit flow]- developers.google.com

[원문] - 원문과 같으나, 현재 설정 화면은 다름


OAuth 로 Account linking 하기

OAuth linking type은 2개의 산업표준 [ implicit 와 authorization 코드 플로우] 가 있다

implicit code flow는 구글이 authorization endpoint를, 브라우저 안에서 열고, 로그인 성공한 후, long-lived access token 을 구글에 반환한다. 이 access token은 Assistant 에서 your Action 으로 보내는 모든 request 에 포함된다.

authorization code flow는 두개의 endpoint가 필요하다.
 ㅇ The authorization endpoint :  아직 로그인 하지 않은 사용자에게 로그인 UI를 제공하고, short-lived authorization code 형식으로 접근 요청을 동의 하고, 기록한다.
ㅇ The token exchange endpoint : 두가지 타입의 교환 역할을 담당한다.
  1. a long-lived refresh token 과 a short-lived access token의 인증 코드를 교환
  2. a short-lived access token을 a long-lived refresh token 으로 교체. 이 교환은 구글이 만료된 새 access token이 필요할 때 발생한다.

비록 the implicit code flow는 적용하기 간단하지만, 구글은 만료기간 없는 the implicit flow 를 access tokens 로 사용하길 권장한다. 토큰 만료된 the implicit flow 는 사양자를 다시 계정에 링크하도록 강요하기 때문이다. 만약, 보안등의 문제로 토큰 만료가 필요한 경우엔, 대신, the auth code flow 를 사용할것을 강력히 고려하라.

[ Implicit flow ] ======================

Implement OAuth account linking

ㅇ 금융 관련 계정 연결은 작업 검토에 6주 소요되므로, 릴리즈 계획에 시간 고려 필요.
금융 서비스 정책 참조

프로젝트 구성
OAuth 계정 연결을 사용하도록 프로젝트를 구성하려면 다음 단계를 수행할 것.
  1. the Actions Console 을 열고 사용하려는 프로젝트를 선택.
  2. Develop 탭을 클릭하고 Account linking 선택 .
  3. Account creation 에서 No, I only want to allow account creation on my website. 선택 
  4. Linking type 에서 OAuth and Implicit 선택.
  5. Client Information 에서  
        ㅇ 구글에서 오는 요청 식별에 Client ID issued by your Actions to Google 로 설정
        ㅇ Authorization 과 Token Exchange endpoint 의 URL을 입력



  • 참고 : 클라이언트 ID를 base64로 인코딩된 문자열로 보내려면, Configure your client (optional) 옆에있는 콤보박스에서 Google to transmit clientID and secret via HTTP basic auth header 에 체크함. 
    6. Save 클릭


OAuth 서버 구현
the OAuth 2.0 implicit flow를 지원하려면,  authorization endpoint가 HTTPS를 사용하도록 
서비스를 만들어야 한다. 이 endpoint 는 데이터 액세스에 대한 사용자의 인증 및 동의역할을 한다.  The authorization endpoint는 아직 로그인을 하지 않은 사용자에게 로그인 UI를 제공하고, 요청된 액세스에대한 동의를 기록한다.

액션이 인증관련 API를 호출해야 한다면, 구글은 이 엔드포인트를 사용하여, 사용자로부터 사용자를 대신해, 해당 API를 호출할 수 있는 권한을 얻는다.

일반적인 OAuth 2.0 implicit flow session은 다음과 같은 흐름을 갖는다.
  1. Google은 사용자의 브라우저에서 authorization endpoint 를 연다. 사용자는 아직 로그인하지 않은 경우 로그인하고, 아직 권한을 부여하지 않은 경우, API를 사용하여 데이터에 액세스 할 수있는 권한을 Google에 부여한다.
  2. 서비스는 access token 생성 하고 요청에 첨부 된 access token을 사용하여 사용자의 브라우저를 다시 Google로 리디렉션하여 access token을 Google에 반환한다.
  3. Google은 서비스 API를 호출하고 각 요청마다 access token을 첨부합니다. 서비스는 access token이 Google에 API 접근 권한을 부여했는지 확인한 다음, API 호출을 완료한다.

승인 요청 처리

액션이 OAuth2 implicit flow를 통해서 계정 연결을 수행해야하는 경우, Google은 아래 매개변수가 포함 된 요청으로 사용자를 권한부여 엔드포인트로 보낸다.
권한 엔드 포인트 매개 변수
client_idGoogle에 할당 한 고객 ID
redirect_uri이 요청에 대한 응답을 보내는 URL입니다.
state리디렉션 URI에서 변경되지 않은 채 Google에 다시 전달되는 부기 값입니다.
response_type응답에 반환 할 값의 유형입니다. OAuth 2.0 암시 적 플로우의 경우 응답 유형은 항상 token입니다.

예를들어, authorization endpoint가 https://myservice.example.com/auth 라면, 요청 명령은
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token
위와 같을것이다.

authorization endpoint 가 로그인 요청을 처리하려면, 다음 단계를 수행한다.


  1. 의도하지 않거나 잘못 구성된 클라이언트 앱에 대한 액세스 권한을 부여하지 않으 려면 client_id및 redirect_uri값을 확인.
    • client_idGoogle에 할당 한 고객 ID와 일치 하는지 확인 .
    • redirect_uri 매개 변수로 지정된 URL의 형식이 다음과 같은지 확인.
      https://oauth-redirect.googleusercontent.com/r/ YOUR_PROJECT_ID
      YOUR_PROJECT_ID 는 작업 콘솔 의 프로젝트 설정 페이지 에있는 ID.
  2. 사용자가 서비스에 로그인했는지 확인. 사용자가 로그인하지 않은 경우, 서비스의 로그인 또는 가입 절차를 완료.
  3. Google이 API에 액세스하는 데 사용할 access token을 생성. access token은 임의의 문자열 값일 수 있지만, 토큰은, 사용자와 클라이언트를 고유하게 나타내야하며 추측 할 수 없어야함.
  4. 사용자의 브라우저에서 redirect_uri매개 변수로 지정된 URL로 redirect하는 HTTP response 을 전송 URL fragment에 다음 parameters를 모두 포함.
    • access_token: 방금 생성 한 액세스 토큰
    • token_type: 문자열 bearer
    • state: 원래 요청의 수정되지 않은 상태 값. 다음은 결과 URL의 예.

https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

Google의 OAuth 2.0 redirect handler는 access token을 받고, state 값이 변하지 않다는걸 확인. Google이 Service에 대한 access token을 획득한 후, Google은 이후, AppRequest의 일부인, 액션 명령에 토큰을 첨부한다.

Start the authentication flow








Account Sign-in helper intent 를 사용해 the authentication flow를 시작한다.  아래 코드 스니펫은, 이 helper를 사용하기위한, Dialogflow 및 Actions SDK에서 응답을 보내는 방법을 기술한다.





Dialogflow:



const {dialogflow, SignIn} = require('actions-on-google');
const app = dialogflow({
  // REPLACE THE PLACEHOLDER WITH THE CLIENT_ID OF YOUR ACTIONS PROJECT
  clientId: CLIENT_ID,
});
// Intent that starts the account linking flow.
app.intent('Start Signin', (conv) => {
  conv.ask(new SignIn('To get your account details'));
});

Actions SDK:



const {actionssdk, SignIn} = require('actions-on-google');
const app = actionssdk({
  // REPLACE THE PLACEHOLDER WITH THE CLIENT_ID OF YOUR ACTIONS PROJECT
  clientId: CLIENT_ID,
});
// Intent that starts the account linking flow.
app.intent('actions.intent.TEXT', (conv) => {
  conv.ask(new SignIn('To get your account details'));
});


Handle data access requests

만약, Assistant request가 access token을 포함한다면, 우선 access token이 유효한가(만료되었나) 검사를 하고, DB에서 후속 사용자 계정을 검색 할 것.


2019년 11월 12일 화요일

[번역]무선 범위와 리피터 가이드 - SmartThings 기술지원팀

통신 관련 지속적으로 발생하는 문제 관련
SmartThings support team 에서 작성한 문서가 있어서 번역/요약 함. (*개인의견추가)

원본 링크


무선 범위와 리피터 가이드

스마트 홈을 만들거나 기존 스마트홈을 보강할 때, 무선 범위와 네트워크 리피터의 기본을 이해하는것이 중요하다. 본 가이드는 스마트씽즈 엔지니어팀에서 썼으며, 가능한 안정적이고 강력한 스마트홈 네트워크를 구성하는데 많은 도움이 되길 바란다.
------------------------
아래와 같은 대화를 가정해 보자.
- 넌 친구가 몇명이야?
- 경우에 따라 다르지, 페이스북 친구까지도 포함 하는지, 아니면 가까운 친구들만 얘기하는건지.  오래전에 봤었는데 더이상 안만나는 사람은? 단순히 얼굴만 아는사람도 친구에 포함 되는건가?
- 음.. 간추려서 숫자 하나만 얘기 해 줘...

사람들이 '무선 범위가 뭐지?' 하고 물을 때 위와 같은 방식으로 엔지니어는 생각한다. 이건 엄청나게 복잡한 주제인데, 질문자는 (암시적으로)단답형 답을 원한다.

이 글에서, 나는 무선 범위에 영향을 주는 요인들을 설명하고자한다. 그리고, 스마트씽즈 홈 네트워크상의 무선 범위를 최대화 하는 방법을 제시한다.

---------------

노이즈를 없애자

놀랍게도, IoT 장치와 허브 사이의 범위를 결정하는 중요한 요소는 장치나 공유기와는 아무 관련이 없고, 사실상 주변 환경에 존재하는 전자기적 '노이즈' 의 양에 많은 영향을 받는다.

예를들면, 아주 시끄러운 클럽에 갔을 때 를 생각 해 보면,  정면에 있는 사람과 대화가 가능할까? 아무리 크게 얘기 해도, 주변 '노이즈'가 더 커서 목소리가 멀리 전달될 수 없다.

무선장치도 이와 유사한 문제를 갖고있다. 여러 다양한 장치에서 발생하는 전자기적 노이즈 로 인하여, 홈IoT 장치들은 서로 경쟁적으로 통신을시도 한다.

아래에 무선 노이즈 원인이 되는 몇가지를 나열한다.

- Wi-Fi 액세스포인트(공유기), 본인 집에있는것과 이웃집에있는것 모두 다.
- 휴대폰
- 전자레인지
- 베이비 모니터
- 형광등
- 무선 게임 콘트롤러
- 자체 Wi-Fi 네트워크를 갖고있는 장치
- 전자기 공중파를 방사하는 싸구려 전자기기

ZigBee 는 2.4GHz 주파수 대역에서 작동하기 때문에, 2.4GHz Wi-Fi 네트워크 및 전자레인지의 영향을 많이 받고, Z-Wave는 900MHz 주파수 대역에서 작동하기 때문에, 휴대폰과 베이비 모니터의 영향을 가장 많이 받습니다. 앞 내용들은 단순한 예시 일 뿐이고, 가정 내에도 무선을 사용하는(노이즈를 유발하는) 전자 장치들이 계속 추가되고 있다.

이러한 소음을 줄이기 위한 조치를 몇가지 알아본다.

  • 5GHz Wi-Fi 로 옮기기
    무선기기인 SmartThings Hub 및 장치의 ZigBee 는 2.4GHz Wi-Fi와 동일한 주파수를 사용한다. 5GHz Wi-Fi 네트워크로 전환하면, 모든 음악과 사람들이 댄스클럽에 함께 가는게 맞지만, 외계인이 들을 수 있는 가청주파수 범위를 넘어서기 때문에 들리지 않게된다.
  • Wi-Fi 채널 변경하기
   Wi-Fi 및 ZigBee에서 사용하는 2.4GHz 주파수는 TV방송처럼 여러 채널로 구성된다. Wi-Fi 채널을 허브의 ZigBee 채널에서 더 멀리 떨어 뜨릴 수 있다면 소음을 줄이는 도움이 된다.
  • 공유기와 여유 공간 확보하기
    홈 IoT 장치를 공유기 바로 옆에 놓는것은 최악의 선택일 수 있다. 클럽에서 스피커 옆에 테이블을 두는것과 같다. 무선 장치를 멀리 떨어트릴수록 소음이 적고, 다른 장치들과 통신할 때 방해를 덜 받는다. (*ZigBee를 사용하는 장치 얘기임. 공유기하고만 통신할 때는, 경험상, 2~3m 거리가 가장 적정한 거리로 보여짐.)
  • 리피터를 사용하기
    아래에 리피터에대해서만 얘기하는 세션이 있긴 하지만, 요약하면, 리피터는 장치와 허브간에 메시지를 릴레이하여, 노이즈가 많은 경우에도, 네트워크의 전체 범위를 효과적으로 넓힐 수 있다.  (*ZigBee의 경우 얘기 같음)
  • 소음 확인 - Oscium WiPry
    좀더 깊이 알고싶다면, Oscium WiPry 같은 2.4GHz 주파수 스펙트럼 분석기 같은걸 사용하여 무선 환경을 스캔할 수 있다.  근처에 강한 Wi-Fi 네트워크가 몇개인지, 전자기파 노이즈를 방출하는 소스가 있는지 조사를 할 수 있다.
  • 이사!
    농담이긴 하지만, 휴대폰 및 여러 무선 장치들로 둘러싸인 Wi-Fi 네트워크 밀도가 높은도시 거주 환경 대비, 시골 농장같은곳에서는 홈 네트워크 범위가 훨씬 넓어진다는건 실제로 비교가 가능하다.

리피터

... 아래 부터의 내용은.. ZigBee 에 한정된 내용이라.. 요약...

    리피터 기능이 있는 ZigBee 를 사용하면 무선 범위를 넓힐 수 있다는 얘기임.


장애물 및 우회하기

  • 서로 볼 수 있는 위치에 배치하기
  • 1개 이내의 벽 / 천장 같은 장애물 까지만 허용하기
  • 중계기 사용하기
  • 허브와 금속성 물체와 떨어뜨리기

각도, 방향, 반사

    (* 안테나 또는 송/수신기도 방향성이 있음)

(*집안에서 적절하게 배치된 허브 예시)

(허브 배치 잘못된 예)



-------
이 기사에 언급되지 않은, 무선 통신에 영향을 미치는 무수히 많은 요인들이 있다
예를들면, 대기온도, 습도, 태양-흑점활동 등등.. 그래서, 모든 무선 제품의 범위를 특정하기는 어렵다. 본 가이드의 내용은 실제적으로 조절 가능한 요소들만 설명하였다. 문서를 마치면서, 집 무선 영역에대해 영향을 주는것들더 이해하고, 집 무선 범위를 좀 더 확장할 수 있기를 바랍니다.


2019년 10월 16일 수요일

[번역] ESP-TOUCH 스마트컨피그 특징

원문은 아래 유저가이드 참조, note 이하 부분 특성 볼것!!

ESP-TOUCH 유저가이드 (영)


1. Technology Overview
Espressif의 ESP-TOUCH 프로토콜은 사용자로 하여금 ESP8266EX- and ESP32-embedded 장치(이하 장치)를 스마트폰을 통한 간단한 설정으로 WiFi 네트워크에 접속하도록 도와주는 Smart Config 기술이다.


처음에 장치가 네트워크에 연결되어있지 않을 때, 응용프로그램은 장치로 직접 정보를 전송할 수 없다. ESP-TOUCH 통신 프로토콜은 WiFi 접속 능력이 있는 장치 (스마트폰 과 같은)가 일련의 (SSID 와 PW를 포함한) UDP 패킷을 WiFi Access Point(AP) 로 송신할 수 있다. 그럼, 장치는 UDP 피킷을 수신하면, 패킷을 분석해서 필요한 정보를 획득한다. 데이터 패킷 구조는 아래 그림과 같다.


2.1 ESP-TOUCH Functional Overview
The ESP8266 OS SDK and NONOS SDK, as well as ESP -IDF, all support ESP-TOUCH. The SDKs also integrate the AirKiss protocol developed by Wechat, so that users can configure the device either via the ESP-TOUCH App or on the Wechat client-side.
....
SDK는 위챗에서 개발한 AirKiss 프로토콜과 통합되어있어서, 사용자는 위챗 클라이언트 또는 ESP-TOUCH 앱 둘 모두 다 환경설정에 사용할 수 있다.
2.2. ESP-TOUCH Operation Process
1. Prepare a device that supports ESP-TOUCH, and enable its Smart Config function.
2. Connect your smartphone to the router.
3. Open the ESP-TOUCH App installed on the smartphone.
4. Input the router’s SSID and password to connect the device to the router. Please, leave a blank in the password box if the router is not encrypted.
---- note ----
라우터와 장치가 가깝게 있으면 단 몇초밖에 안걸린다. 거리가 멀면 멀수록 연결되기까지 더 오래걸린다.
ㅇ 설정하기 전에 라우터(공유기)가 켜져있는지 확인해라, 그래야 장치가 주변의 공유기를 검색할 수 있다.
ㅇ ESP-TOUCH로부터 전송된 연속 데이터는 시간제한이 있다. 일정 시간안에 연결되지 않으면, 앱은 환경설정 실패 메시지를 리턴한다.(좀 더 자세한 사항은 App 소스코드를 참조). 마찬가지로, 장치도 SSID / PW 획득 시간이 설정 되어져있다.
ㅇ SSID/PW 정보 획득 전에 제한 시간에 다다르면, 장치는 자동으로 스마트컨피그의 다음단계를 진행한다. esptouch_set_timeout(uint8 time_s) or esp_smartconfig_set_timeout(uint8 time_s) 함수로 제한시간을 설정할 수 있다.
ㅇ 스마트 컨피그 할 때, Sniffer 모드가 활성화 되어있어야 한다. Station, soft-AP 모드는 비활성화 되어야 한다. 다른 API는 호출되면 안된다. Station, soft-AP 모드는 스마트 컨피그 하는동안 동시에 ESP32 가 허용된다.
ㅇAfter the configuration process is completed, the transmitter will get the IP of the device, and the device will return the IP of the transmitter. If the user wants to customize the information exchange between the transmitter and the device, the IP information can be used for performing LAN communication.
ㅇ 설정과정이 완료된 후에, transmitter는 장치에 IP를 가져오고, 장치는 transmitter의 IP를 반환한다. 사용자가 transmitter와 장치와의 정보 교환 내용을 수정하면, 해당 IP 정보로 LAN 통신을 수행할 수 도 있다.
ㅇ 만약 AP isolation mode 가 router에 활성화 되어있으면, 연결이 확립 되었다 할지라도, 앱은 환경설정 성공 메시지를 받지 못 할 수 도 있다.
ㅇ 같은 라우터에 연결하고자하는 여러 장치를 동시에 설정할 수 있고, 앱은 여러개의 return value를 받는다.
ㅇ ESP8266 and ESP32은 5G 와 11AC 모드를 지원하지 않는다. 즉, 스마트컨피그는 5G 또는 11AC 모드로 할 수 없다.