[IoT Switch] Adafruit, IFTTT, google assistant 연동 테스트

세상이 좋아진 것을 느낀다.

적어도, 상품을 판매하는게 아니라 사용하는 것은 되게 쉬워졌다.

DIY로 내가 딱 필요한 것을 만들기에는 쉬워졌다.

이번에는 IFTTT, adafruit, google assistant라는 것들을 활용해서 원격에서

스위치를 제어하는 것을 해보려고 한다.

이 기능은 전에 만든 스위치에 적용을 할 예정이다.

참고하고 공부한 블로그 페이지가 있다.

https://www.instructables.com/id/Control-Your-Projects-With-Google-Assistant-and-Ad/

http://www.makewith.co/page/project/1093/story/2760/

이것을 따라한 것에 대해 글을 작성해본다.

간단하게 과정에 대해서만 작성하였고, 하는 방법은 위에 글을 참고한다.

image.png

구현할 것에 대해 간단하게 그림을 그려봤다.

사용자는 스마트폰으로 간단하게 불켜줘, 불꺼줘라고 말을 하고,

Broker을 통해 IoT Device에게 명령을 전달한다.

IoT Device는 전달받은 명령에 따라 동작을 한다.


장점

이런 구성의 장점은 개발자나 사용자가 IoT Device의 ip를 신경쓸 필요가 없다.

IoT Device가 인터넷에만 연결되어 있다면, 그리고 브로커와 연결된 끈이 있다면

어디서든지 이 디바이스를 제어할 수 있게 된다.

그리고 이 브로커들은 기존에 있던 구글 어시스턴트나 아마존 에코 등과 쉽게 통신할 수 있도록 해놨다.

생각나는게 있거나 찾으면 더 적어보자.

IP를 신경쓸 필요 없다는 것은 IoT Device가 접속한 네트워크를 바꾸는 것과 상관없이 연결이 가능한 것이다.

예를 들어, 우리집에서 사용하던 것을 wifi만 연결하면 친구 집에 가서도 쉽게 사용할 수 있다.


Adafruit 셋팅

https://io.adafruit.com

Adafruit는 중계기 같은 역할을 한다.

Data를 주고 받을 수 있다.

Adafruit에서 Feeds (주고 받을 데이터 type 설정)와 Dashboards를 설정해야한다.

작성자는 switch라는 이름의 feed를 생성하였다.

그리고 Dashboards에서는 on/off swtich를 만들었다.

그리고 Dashboard에선 AIO KEY를 발급받는다.

이 키는 esp8266가 알 수 있게 해야한다.

image.png

코드는 아래 사이트에서 참고했다.

https://www.instructables.com/id/Control-Your-Projects-With-Google-Assistant-and-Ad/

내 설정에맞게 subscribe를 바꿨다. /feeds/switch

여기까지만 하면, adafruit와 iot device가 연결이 된 것이다.

adafruit dashborad에서 디바이스를 컨트롤할 수 있다.


IFTTT 설정

IFTTT 설정은 adafruit와 google assistant를 연결하기 위한 것이다.

Applet이란 것을 만들어야 한다.

google assistant에서 “Turn on the light”라고 할 때, ON 신호를 adafruit에 보낸다. 를 수행하기 위한

applet (프로그램)을 만들어야 하는데, 코드를 작성하는 것은 아니고 잘 채워넣으면 된다.

https://platform.ifttt.com/maker에서 만든다.

image.png

만들고 실행시켜보면, 핸드폰에서 허가할 것이냐고 나온다.

허가를 하면, 위의 시스템 구성처럼 google assistant에서 switch를 on/off할 수 있게된다.


후기

사용해보면서 아주 편리했다.

이 스위치를 판다고 생각할 때, 사용자들에게 IFTTT, adafruit, google assistant 설정을 요래 하시면 됩니다.

이렇게 잘 설명해줄 수 있을까? 어렵지 않을까? 그런 생각이 들었다.

DIY Kit로 판다면? 조금이나마 따라올 수 있을 것 같다.

어떻게 하면 쉽게 사용하게 할 수 있을까?

고민이 필요하다.

[IoT Switch] DIY 스위치 소개

안녕하세요. 제이콥입니다.

이번에는 제가 취미로 개발하고 있는 IoT 스위치에 대해 소개합니다.

개발한 IoT 스위치는 제가 집에서 잘 사용하고 있습니다.


기존 IoT 스위치

IoT 스위치는 몇몇 분들은 사용해봤을수도 있습니다.

IoT 스위치는 멀리서 불을 껏다켰다 할 수 있게 해주는 스위치/시스템입니다.

제가 조사한 바로는 2개 정도가 사용할만 해보였습니다.

<정보가 틀렸다면 말씀해주세요>


스위처 장단점

스위처의 장점은 쉽게 붙였다 뗄 수 있는 것, 5만 5천원만 내면 된다 입니다.

스마트폰을 통해 불을 껏다 켰다할 수 있습니다. 잘 만든 것 같습니다.

단, 블루투스로 통신을 하기 때문에, 집 안에서만 사용이 가능합니다.

하지만, 선택과 집중을 잘 했다는 생각이 듭니다.


LG 장단점

LG IoT 스위치의 장점은 LG 홈서비스, IoT 서비스 위에서 동작한다 정도일 것 같습니다.

아마 스마트 스피커로도 불을 껏다 킬수 있고, 집 밖에서도 킬 수 있을 것입니다.

단점은 IoT 패키지 가입, 월 2200원 요금, 기존 스위치 제거 후 설치 등

스위치만을 위해서 가입하기는 부담스럽습니다.


개발 목표

이 두 상품을 보고 직접 만들어볼만한데? 라는 생각이 들었습니다.

두 개의 장점을 잘 섞어서!!

  1. 와이파이로 통신
  2. 스마트폰, 로봇, 스피커, 노트북 등에서 제어
  3. 탈부착식
  4. 싸게 만든다 (만원)

요 조건을 만족하며 만든게 바로 제가 만든 것입니다.

아래 부품들을 이용해서 싸게 만들어봤습니다.

  • 마이크로컨트롤러 – 8800원
  • 서보모터 – 집에서 굴러다니는 모터
  • 다이소 테이프식 후크 – 1000원
  • 나무젓가락

image.png


동영상

동영상을 보시죠.

동영상을 보시면 저절로 껏다켜지는 것을 볼 수 있는데요.

핸드폰을 이용해서 껏다켰습니다.

 


두번째 영상 보시죠.

예전에 만든 J-bot을 이용해서 불을 껏다 켜봤습니다.

‘불꺼줘’, ‘불켜줘’ 라는 키워드로 해봤는데요.

 

 


관심이 많으면 한 번 이걸 완성도 있게 만드는 것으로 해서

시리즈로 글도 써보고 싶기도 해요.

또 다른 꿈은 몇 가지 완성도를 높일 계획이 있는데..

좀 더 완성도 있게 만든 후, 크라우드펀딩을 해보고 싶네요.

감사합니다.

Connect amazon alexa vocie and ROS using alexa skill, lambda, pubnub #1

이 글은 아마존 에코 스피커와 로봇을 연결하여 여러 명령을 하기 위한 셋팅입니다.

이 글 관련으로 2편-3편 정도 시리즈를 생각하고 있습니다.

감사합니다.


목적

스마트 스피커와 로봇을 연결할 필요가 생겼다.

왜냐하면 음성 인식 관련 소프트웨어, 하드웨어를 모두 다 개발할 수 없기 때문이다.

집중할 부분에 집중하고 이미 잘하는 것은 활용하는게 현명한 것 같다.

예를 들어, 여러 마이크를 사용하여 노이즈를 없앤다거나, 어느 방향인지 파악하는 것, 음성인식

잘하는 기존 제품을 활용해본다.

이 글을 쓴 이유는

기존의 글들을 보고 그대로 해도 동작도 안하고 따라하기 어려웠다. (사용하는 라이브러리가 바뀜, UI가 바뀜)

다시해도 제대로 못할 것 같아서 정리를 하게 됐다.


 

시스템 구조

<출처 – https://www.hackster.io/grassjelly/autonomous-home-assistant-robot-fff43e>

기존에 아마존 알렉사와 로봇 사이에 연결한 수많은 예시들을 찾아봤다.

  • 로봇과 알렉사를 연결하는 수많은 예시가 있다.
    • 다 복잡하고 잘 안된다.
    • pubnub으로 하는게 깔끔한 편이다.
      • ip를 알 필요가 없다.
      • 고정 ip가 아니여도 된다.
      • 인터넷만 잡으면 된다.

그 중에 내가 선택한 시스템은 위에 그림이다.

간단히 설명하면

사용자가 Echo 스피커에서 무언가 말을 하고, 그 중에 일부 (내가 설정한 어떤 명령어들)는 AWS LAMBDA FUNCTION (서버)에서 처리한다.

처리된 데이터는 PubNub이라는 중간 브로커를 통해 로봇 시스템 (ROS)에 전달하게 된다.

각자 인터넷만 연결되어 있다면, 스피커에서 로봇으로 각각의 단계를 거쳐 원하는 명령을 내릴 수 있다.


Alexa skill setup

https://developer.amazon.com/alexa/console/ask? 에서 셋업하면 된다.

Interaction Model 작성하기

  • 어떤 명령을 받았을 때, 이 skill (프로그램)을 사용할지 결정한다.
  • 되게 재밌는게 Sample Utterances에 활용해서 비슷한 문장을 말해도 같은 Intent를 실행하게 된다.
    • 즉, 완전 똑같지 말하지 않더라도 원하는 Intent를 호출 할 수 있다.
    • type도 정할 수 있다.
    • My favorite color is {color_type}.

End point 설정

  • 처음할 때 햇갈렸다.
    • 동영상을 보도록 한다.
  • 이 모델에 대한 결과를 만들어 줄 서버가 필요하다.
  • 작성자는 이 서버를 lambd로 만들었다.
    • 이번에 이 시스템을 구현하기 위해서 처음 사용해봤다.
    • 예제를 보면서 하면 할만하다.
    • python, nodejs가 있다.

Skill ID – 이 스킬의 ID이다.

AWS Lambda ANR – 서버라고 생각하면 편하다. 서버의 ID다.

  • ANR은 Lambda 함수를 만들고 나서 그 함수 관리 페이지에서 볼 수 있다.
  • ANR에서도 skill ID를 입력해야하고, Skill에서도 ANR을 입력해야한다. 서로 입력해야함.

주의할 점

  • 항상 save와 build를 잘 하도록 한다.
  • ANR, skill ID 확인

테스트

  • Interaction Model과 ANR을 입력하면 Test를 할 수 있다.
  • Skill은 launch (시작), 서버에서 처리할 수 있는 명령, quit(종료)로 구성된다.
    • 이게 무슨말이냐면
    • Invocation으로 정한 키워드를 통해 alexa에게 나의 skill을 호출하라고 명령한다.
      • Invocation이 “conversation application”이라 가정하면
      • ex – alexa run “conversation application”라 말하면 된다.
      • 이 때 launchIntent가 실행된다.
    • 다음으로 설정한 intent들을 호출할 수 있다.
      • launch 한 후, intent에 대한 결과를 반환한다.
    • quit를 하면 실행했던 skill을 사용중지한다.

시뮬레이션에서 돌려본 결과이다.


Lambda

https://ap-northeast-1.console.aws.amazon.com/console/home?region=ap-northeast-1#

참 괜찮은 서비스다.

하나의 실행 모듈을 돌릴 수 있다.

lambda를 통해, 각 intent에 대해 어떤 동작을 할지 결정할 수 있다.

코드 입력

코드 입력 유형 –> .zip 파일 업로드로 코드를 업데이트 하면된다.

nodejs로 할 경우, package.json에 종속성을 체크한다.

그리고 npm install 후에 그 폴더 자체를 압축해서 lambda로 보낸다.

로그 보기

로그가 보고싶을 땐, 모니터링에서 CloudWatch에서 로그 보기를 한다.

자세한 내용은 튜토리얼을 첨부한다.

https://github.com/alexa/skill-sample-nodejs-hello-world

힘들었던 것

  • 참고했던 링크들을 보면 라이브러리 버젼이 달랐었다.
  • 이제는 안 쓰는 함수들을 쓴다던가..
  • 그래서 링크들의 소스들은 참고만하고
  • hello-world 코드에다가 pubnub을 적용하였다.

 


PubNub

PubNub은 lambda와 로봇의 중간 브로커 역할을 한다.

로봇은 보통 고정 ip를 갖고 있지 않다.

그렇기 때문에 외부에서 로봇에 연결하기 위해서는

포트 포워딩을 통해 로봇 ip에 잘 찾아갈 수 있도록 해야한다. (아는게 이것밖에 없군요.)

Pubnub은 설정을 할 필요 없게 해주는 서비스다.

lambda에서 pubnub으로 데이터를 넘기면 pubnub이 알아서 로봇 쪽으로 보내준다.

반대도 마찬가지다.

 

PubNub Setting

https://admin.pubnub.com/에서 셋팅한다.

  1. Create new App.

  2. Create new keyset.

    1. publish key와 subscribe key는 lambda와 로봇 쪽 코드에서 필요하다.
  3. Debug console

    1. 디버그 콘솔 창에서 add client
    2. channel을 확인한다.
    3. channel 또한 lambda와 로봇쪽에서 필요하다.
    4. 같은 채널로 데이터를 주고받아야 한다.
    5. 주고 받기 위해서는 publish key와 subscribe key가 필요하다.


로봇 쪽 통신 코드

아래 코드를 참고했다.

https://www.pubnub.com/docs/python/data-streams-publish-and-subscribe

 


일단 셋팅 및 테스트는 완료했다.

실제 활용에 대해서는 다음 포스팅에서 적어보도록 하겠다.

셋팅을 하면서 작성한 코드도 깃헙에 올린다.

https://github.com/passionbull/alexa-ros-python-pubnub

 

참고한 링크