IoT에서 아보카도의 발아 촉진과 곰팡이 방지 - Part3: Hubot이 MQTT에서 기온을 표시하거나 LED 조명
사용 사례
지금의 기온을 알고 싶다 (Subscribe)
Slack에서 bot에 "지금의 온도는?"나 "지금의 온도는?"에 질문하면 MQTT 브로커에서 subscribe하는 환경 데이터의 최신 값을 알려줍니다.
LED 라이트를 on/off 하고 싶다 (Publish)
Slack에서 bot에 "라이트 붙여"나 "라이트 끄고"라고 지시하면 MQTT 브로커에 publish하여 식물 육성 LED 라이트를 붙이거나 지워줍니다.
프로젝트
마지막으로 만든 프로젝트에 몇 가지 설정을 추가했습니다. 리포지토리는 여기입니다.
$ cd ~/node_apps/docker-hubot-slack
$ tree
├── Dockerfile
├── README.md
├── docker-compose.yml
├── docker-compose.yml.default
├── redis
└── scripts
├── hello.coffee
└── mqtt_meshblu.coffee
Dockerfile
Dockerfile은 Docker 이미지의 글로벌 hubot 패키지를 설치합니다. Yeoman을 사용하여
/app
디렉토리에 Hubot 프로젝트를 만듭니다. Docker 호스트의 작업 사용자와 동일한 uid docker
사용자로 전환합니다. Yeoman 생성기가 만든 /app/package.json
에 이번에 사용할 hubot-slack 및 mqtt 패키지를 추가하여 설치합니다.~/node_apps/docker-hubot-slack/Dockerfile
FROM iojs:2.3
MAINTAINER Masato Shimizu <[email protected]>
RUN mkdir -p /app
WORKDIR /app
RUN adduser --disabled-password --gecos '' --uid 1000 docker && \
chown -R docker:docker /app
RUN npm install -g hubot coffee-script yo generator-hubot
USER docker
RUN yes | yo hubot --defaults && \
npm install --save hubot-slack mqtt
scripts/mqtt_meshblu.coffee
MQTT 클라이언트는 MQTT.js을 사용합니다. 이번에 작성한 정규식
robot.respond
에서 bot은 최소한의 명령만 이해할 수 있습니다. 라쿠텐 의 형태소 해석을 사용해도 조금 현명하게 응답할 수 있도록(듯이) 하고 싶습니다.~/node_apps/docker-hubot-slack/scripts/mqtt_meshblu.coffee
# -*- coding: utf-8 -*-
mqtt = require 'mqtt'
opts =
host: process.env.MQTT_HOST
username: process.env.ACTION_1_UUID
password: process.env.ACTION_1_TOKEN
protocolId: 'MQIsdp'
protocolVersion: 3
client = mqtt.connect opts
client.subscribe process.env.ACTION_1_UUID
sensor_data = ''
client.on 'message', (topic, message) ->
payload = JSON.parse message
sensor_data = payload.data
commands =
'気温': 'temperature'
'湿度': 'humidity'
'気圧': 'pressure'
units =
'気温': '℃'
'湿度': '%'
'気圧': 'hPa'
module.exports = (robot) ->
robot.respond /(気温|湿度|気圧)を(おしえて|教えて)$/i, (res) ->
sensor = res.match[1]
answer = if sensor_data
retval = sensor_data[commands[sensor]] + ' ' + units[sensor]
sensor + 'は ' + retval + ' です。'
else
'データが取れません。:imp:'
res.send answer
robot.respond /ライトを(つけて|付けて|けして|消して)$/i, (res) ->
on_off = switch res.match[1]
when 'つけて', '付けて' then 'led-on'
when 'けして', '消して' then 'led-off'
else 'led-on'
answer = if on_off == 'led-on' then 'ピカッ。' else 'カチッ。'
message =
devices: process.env.ACTION_3_UUID
payload: on_off
client.publish 'message', JSON.stringify(message)
res.send answer + ':flashlight:'
Subscribe한 환경 데이터 보기
robot.respond /ライトを(つけて|付けて|けして|消して)$/i, (res) ->
Raspberry Pi는 BME280에서 측정한 환경 데이터를 JSON 형식으로 MQTT 브로커에 게시합니다. 이 bot에서 subscribe하여 메시지를 받을 때마다 전역
sensor_data
을 업데이트합니다. bot가 온도 또는 습도 질문을 받으면 수신 중인 메시지를 반환합니다.Publish하여 LED 조명을 켜고 끄는 지시
robot.respond /ライト(つけて|付けて|けして|消して)$/i, (res) ->
'켜기'의 경우 'on', '해결'의 경우 'off' 값을 payload에 넣고 메시지를 MQTT 브로커에 게시합니다. 이 메시지는 BeagleBone Black이 subscribe합니다. on/off에 따라 USB 전원 연동 탭을 연결하고 있는 USB 허브의 포트 전원을 제어합니다. 이것이라고 리모트로부터 정말로 식물 육성 LED 라이트가 점등했는지 모르는 것이 과제입니다. Web 카메라라든지 붙이면 좋을지도.
Reference
이 문제에 관하여(IoT에서 아보카도의 발아 촉진과 곰팡이 방지 - Part3: Hubot이 MQTT에서 기온을 표시하거나 LED 조명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masato/items/2d75915813a5b61e8b2e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)