Closed3
2時間でobnizを活用した温度記録デバイスを作る
ライブラリのインストール
npm で実施
npm i obniz
npm i @line/bot-sdk
npm i express
npm i stein-js-client
ターミナル上で入力
よくよく考えたら、今回push message だからexpressいらない
botの作成
以下、JavaScriptとNode.jsにて作成
今回は温度検知してpushだからこれ
コードベタばりで一斉送信完了
google sheetへの記録
いつものStein
ここまでのコード
// ########################################
// LINEBot イベント処理部分
// ########################################
const config = {
channelSecret: '設定したチャネルシークレット',
channelAccessToken: '設定したチャネルアクセストークン'
};
const line = require('@line/bot-sdk');
const client = new line.Client(config);
const report = async () => {
const messages = [{
type: 'text',
text: 'いっせい送信です!'
}];
try {
const res = await client.broadcast(messages);
console.log(res);
await store.append("シート1", [
{
日時: "a",
温度1: "s",
温度2: "s",
}
]);
} catch (error) {
console.log(`エラー: ${error.statusMessage}`);
console.log(error.originalError.response.data);
}
}
report();
obnizのところを作る
使用するセンサー類
obniz Board 1Y
温度センサー:LM60
フルカラーLED:WS2811 後述しますが使いませんでした
詳細なコード
let temp1 = 0;
let temp2 = 0;
const Obniz = require('obniz');
const obniz = new Obniz('****-****');
// obnizと接続確立したとき
obniz.onconnect = async () => {
obniz.display.clear();
obniz.display.print('obniz Ready');
obniz.switch.onchange = async function (state) {
// スイッチ右でtemp1、左でtemp2
if (state === 'right') {
console.log('right');
obniz.display.clear();
obniz.display.print('right');
temp1 = await getObnizTemp1();
console.log(temp1)
} else if (state === 'left') {
console.log('left');
obniz.display.clear();
obniz.display.print('left');
temp2 = await getObnizTemp2();
console.log(temp2)
}
}
}
// 温度センサから値を取得して返す
const getObnizTemp1 = async () => {
// 温度センサの利用
const tempsens = obniz.wired('LM60', { gnd: 6, output: 7, vcc: 8 });
const temp1 = await tempsens.getWait();
console.log('obniz temp:', temp1);
return temp1;
}
const getObnizTemp2 = async () => {
// 温度センサの利用
const tempsens = obniz.wired('LM60', { gnd: 9, output: 10, vcc: 11 });
const temp2= await tempsens.getWait();
console.log('obniz temp:', temp2);
return temp2;
}
組み合わせて全体作る
現在の日付出力
詳細なコード
//日付の取得
let year = now.getFullYear();
let month = now.getMonth()+1;
let date = now.getDate();
let hour = now.getHours();
let min = now.getMinutes();
let sec = now.getSeconds();
//obniz起動したら日時をログとgoogle sheetに記載
const SteinStore = require('stein-js-client');
const store = new SteinStore('作成したAPI URL');
const Obniz = require('obniz');
const obniz = new Obniz('****-****');
// obnizと接続確立したとき
obniz.onconnect = async () => {
console.log(year + '年' + month + '月' + date + '日');
console.log(hour + ':' + min + ':' + sec);
obniz.display.clear();
obniz.display.print('obniz Ready');
await store.append("シート1", [
{
日付: year + '年' + month + '月' + date + '日',
時間: hour + ':' + min + ':' + sec,
温度1: "s",
温度2: "s",
}
]);
}
実際のプロダクトとコード
LEDについて
本来は、正常温度の時は青色、温度以上があった時は赤色にLEDを点灯させる予定でしたが、省電力のためにスリープにしてしまうと、LEDも消えてしまうため、LINE Botへのアラートのみとしました。ごめんなさい。
指定した時間ごとに温度ログをとります(今回は1分間隔)
温度をとっていない時はスリープしています。
温度異常が発生した場合は、LINE に通知がきます。
この時は、意図的に表示温度を操作しています。
詳細なコード
'use strict';
let temp1 = 0;
let temp2 = 0;
let now;
let year;
let month;
let date;
let hour;
let min;
let sec;
const SteinStore = require('stein-js-client');
const store = new SteinStore('発行したSteinAPIURL');
// ########################################
// obniz処理部分
// ########################################
const Obniz = require('obniz');
const obniz = new Obniz('****-****');
// obnizと接続確立したとき
obniz.onconnect = async () => {
now = new Date();
year = now.getFullYear();
month = now.getMonth()+1;
date = now.getDate();
hour = now.getHours();
min = now.getMinutes();
sec = now.getSeconds();
obniz.display.clear();
//温度の記録
console.log(year + '年' + month + '月' + date + '日');
console.log(hour + ':' + min + ':' + sec);
temp1 = await getObnizTemp1();
temp2 = await getObnizTemp2();
await store.append("シート1", [
{
日付: year + '年' + month + '月' + date + '日',
時間: hour + ':' + min + ':' + sec,
温度1: temp1,
温度2: temp2,
}
]);
if(temp1 > 30 || temp2 > 30){ //温度帯に合わせて記載(冷蔵 > 5、冷凍 > -15)
await report();
}
obniz.sleepMinute(60*4); // ()の中は分単位で指定
}
// 温度センサから値を取得して返す
const getObnizTemp1 = async () => {
const tempsens = obniz.wired('LM60', { gnd: 6, output: 7, vcc: 8 });
const temp1 = await tempsens.getWait();
console.log('obniz temp:', temp1);
return temp1;
}
const getObnizTemp2 = async () => {
const tempsens = obniz.wired('LM60', { gnd: 9, output: 10, vcc: 11 });
const temp2= await tempsens.getWait()+10;
console.log('obniz temp:', temp2);
return temp2;
}
// ########################################
// LINEBot イベント処理部分
// ########################################
const config = {
channelSecret: '取得したチャネルシークレット',
channelAccessToken: '取得したアクセストークン'
};
const line = require('@line/bot-sdk');
const client = new line.Client(config);
const report = async () => {
const messages = [{
type: 'text',
text: `温度異常が発生しています
冷ケース1:${temp1}
冷ケース2:${temp2}`
}];
try {
const res = await client.broadcast(messages);
console.log(res);
} catch (error) {
console.log(`エラー: ${error.statusMessage}`);
console.log(error.originalError.response.data);
}
}
このスクラップは2021/12/21にクローズされました