LINEでラズパイさんから家の温度を教えてもらう

経緯

※この資料は、社内発表用に作成したものです。


そんな気がしたのでやってみた。


今回 RaspberryPiでやりたいこと


環境


準備

前出のハンズオン資料に従って準備。

RaspberryPi側に導入するもの

その他の準備


RaspberryPiでサーバ起動&アクセス

  1. node server.js(ソースは後述)
  2. ngrok http ポート番号(1. のポートを指定)
  3. LINEのWebhookURLに 2. のURLを設定する。

おうむ返し

メッセージをそのまま返してくれる。

repeat

▼ほぼ公式ドキュメントのまま

'use strict';

const express = require('express');
const line = require('@line/bot-sdk');

const PORT = process.env.PORT || 3000;

const config = {
channelAccessToken: 'CHANNEL_ACCESS_TOKEN',
channelSecret: 'CHANNEL_SECRET'
};

const app = express();

app.post('/webhook', line.middleware(config), (req, res) => {
console.log(req.body.events);
Promise
.all(req.body.events.map(handleEvent))
.then((result) => res.json(result));
});

const client = new line.Client(config);

function handleEvent(event) {
if (event.type !== 'message' || event.message.type !== 'text') {
return Promise.resolve(null);
}

let mes = '';
mes = event.message.text;

return client.replyMessage(event.replyToken, {
type: 'text',
text: mes
});
}

app.listen(PORT);
console.log(`Server running at ${PORT}`);

### キーワードごとに処理を分ける

「いまなんじ」で時間を教えてもらう。

time

const moment = require('moment-timezone');

// 省略 //

if(event.message.text === 'いまなんじ') {
mes = '現在の時刻は'+moment().tz("Asia/Tokyo").format('HH時mm分ss秒')+'です';
} else {
mes = event.message.text;
}

本題
温度を問い合わせる


センサー接続

こんな感じ

raspberrypi

配線は、次のスライド記載のライブラリのREADMEから。


センサーからデータ取得

node-dht-sensorというライブラリを使用。

const sensorLib = require('node-dht-sensor');

const sensor = {
sensors: [ {
name: "DHT11",
type: 11,
pin: 4
} ],
read: function() {
const readout = sensorLib.read(this.sensors[0].type, this.sensors[0].pin);
return '室内の温度は'+readout.temperature.toFixed(1)+'℃、'+'湿度は'+readout.humidity.toFixed(1)+'%です。';
}
}

exports.getData = function() {
try {
return sensor.read();
} catch (error) {
return 'わかんない';
}
}
const raspi = require('./raspi');

// 省略 //

if(event.message.text === 'いまなんじ') {
mes = '現在の時刻は'+moment().tz("Asia/Tokyo").format('HH時mm分ss秒')+'です';
} else if(event.message.text === 'いまなんど') {
mes = raspi.getData();
} else {
mes = event.message.text;
}

いざ「いまなんど」


きた

temperature1


にぎってみる

temperature2


ちょっと上がった

temperature3


まとめとか


おわり。

← Blog