Beebotte의 메시지를 Raspberry Pi에서 수신

Raspberry Pi와 협력하는 Alexa 스마트 홈 기술 개발을 고려하고 있습니다. Alexa→Lambda 함수→AWS IoT→Raspberry Pi에서도 좋지만, AWS IoT는 종량 요금제라고 하는 일도 있어, 우선은 AWS IoT가 아니라 Beebotte와 사용하려고 하고 있습니다(2019년 2월 현재 Beebotte는 프리 플랜 하지만 내 용도에는 너무 많은 양의 메시지를 사용할 수 있습니다.) 그래서 향후 Lambda 함수에 올리기 위해 Beebotte에 Publish하는 코드를 작성해 Node-RED의 mqtt in 노드에서 수신을 해 보았습니다. Beebotte에 Publish/Subscribe하려고 하는 분은 꼭 시도해 주세요. (라즈파이에서 Beebotte에 Publish하는 경우, Node-RED의 mqtt out 노드를 사용하는 것이 편합니다.)

Beebotte 준비 및 Node-RED에서 Subscribe



여기 에 알기 쉽게 구분되어 있으므로, 여기서는 할애합니다.

Beebotte에 게시



여기 의 Nodejs 코드를 거의 그대로 이용하고 있습니다. 다른 점으로는 'Hello World'를 전달하는 것이 아니라 가전 조작을 내다보고 여러 요소를 반환하고 있다는 것입니다. AWS Lambda는 Nodejs의 샘플이 많았기 때문에 Nodejs로 하고 있습니다.

test_publish.js
var bbt = require('beebotte');

var API_KEY = API Key;
var SECRET_KEY = Secret Key;
var CHANNEL = チャネル名;
var RESOURCE = リソース名;

var bclient = new bbt.Connector({apiKey: API_KEY, secretKey: SECRET_KEY});

bclient.publish(
  {channel: CHANNEL, resource: RESOURCE, data: {
    'resource': 'light', 'command': 'on', 'option': '30'
  }},
  function(err, res) {
});

※ 「API Key」 「Secret Key」 「채널명」 「자원명」을 적절히 치환해 주세요. 「API Key」와 「Secret Key」는 2019년 2월 현재 Beebotte의 웹 페이지에서 「Account Settings」→「Access Management」탭에서 참조 가능합니다. 「채널명」과 「리소스명」은 스스로 설정한 것입니다.
※ 이번은 이것을 수신하는 것만으로 가전 조작은 실시하지 않습니다.

이렇게하면 Node-RED의 mqtt in 노드에서 수신 할 수 있어야합니다. mqtt in 노드 설정의 주의점으로서는, 토픽에는 「채널명/리소스명」을 설정하는 정도라고 생각합니다. 또한 mqtt in 노드 바로 다음에 json 노드를 배치하여 Subscribe한 data를 분해할 수 있습니다.


이전 샘플 프로그램에서 보낸 요소는
- msg.payload.data.resource("light"포함)
- msg.payload.data.command("on"포함)
- msg.payload.data.option("30"포함)
와 같은 형태로 후속의 처리로 이용 가능하게 됩니다.

향후 스마트 홈 스킬 작성에서도 해당 주제를 Subscribe하는 mqtt in 노드를 하나 준비해 두고, msg.payload.data의 resource로 조작 대상을 전환해, command와 option으로 조작 내용을 전환할 예정입니다.

참고로 한 사이트



Beebotte의 메시지를 Node-RED에서받습니다.
beebotte Quick Start Guide

좋은 웹페이지 즐겨찾기