前からも持ってはいたのですが、obniz Board 1Y
(以降Obnizとします)を入手しました。これまでObniz
を使って行っていたのはWeb経由でのアプリ開発まではおこなっていました。具体的には以下のようなものをつくっています。
この中ではObniz
はタイマー処理、大型のソレノイドの制御(木魚を鳴らす)、リレー制御(ブッダマシン起動)を行っています。基本的にはUIありきという内容だったのでWebのインターフェースを使用するのもちょうどよかったのかなと思います。
個人的にはあまりWebのUI開発に関しては得意ではないので、出来ればNode.js
などのコードから直接から制御できればいいなと思っていました。ただ、手を付けられていませんでした。
そんな中、「obniz IoT コンテスト 2021 | elchika」が開催されるという話をきいたので、ちょっと使ってみようと思いました。(アイデアに使うかはまだ決めていない)
そこで検索したところ以下のようなものがあることを見つけました。Node.jsで動くことは知っていましたが、LINEのNotifyのメッセージを送信することができるようでした。
今回はこちらを利用して、Obniz
だけでなく、RaspberryPiでもNode.js
をつかってメッセージ送信をしてみようと思います。
LINE側の事前設定
LINE側ではそのままではメッセージの送信を行うことができません。そこでLINE側で事前設定を行う必要があります。
以下のリンクをクリックし、LINEにログインを行ってください。(LINEアカウントを持っていない方は残念ながらこの機能は使用することはできません)
以下のような表示になるので、
画面上部右側にあるユーザー名のプルダウンをクリックし、その中からマイページを選択します。
すると表示が変わり以下のような画面に遷移します。続いてはアクセストークンの発行(開発者向け)
にある
【トークンを発行する】ボタンをクリックします。
すると、ダイアログが表示されます。ここで【トークン名】と【通知を送信するトークルーム】の設定を行います。トークン名は識別に使用できるようにメッセージに付加される情報になるので、わかりやすいものを使用しましょう。相手先は自分に遅れればとくに問題はないかなと思いますが、宛先の方がびっくりしないように注意してください。
今回は最終的にObnizからメッセージ送信を行うので、以下のようにObniz通知
を設定しました。宛先は自分のみに設定しています。設定が終わったら、下の方にある【発行する】ボタンをクリックします。
すると、トークンが発行されます。ここで表示されるトークンは1度きりの表示なので、忘れずにコピーを行って保存してください。
【閉じる】ボタンをクリックすると、先ほどの情報が連携中サービスとして登録されています。これでLINE側の事前作業は完了です。
RaspberryPiをホストとして使用する
今回はNode.js
さえ動作すれば、処理系はなんでもよいのですが、今回は導入が比較的慣れているRaspberryPiにしました。まずは、RaspberryPiにNode.js
をインストールしていきます。バージョンを自由にかえる事のできるn
を導入するのでもよいのですが、今回は普通にインストールを行っていきます。以下のようにするとNode.js
の14系がインストールされ、npmなどもインストールされます。
Node.jsのインストール
$ curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash - $ sudo apt-get install -y nodejs
参考
RaspberryPiからLINE Notifyメッセージを送信する
Node.jsがインストールができたので、続いてはLINEのNotifyメッセージを送信するというモジュールをインストールしていきます。
再掲
インストールは以下のようにすればOKです。
$ npm install line-notify-nodejs
インストールが問題なく行われたら、以下のようなapp.js
を作成します。途中にある*
の羅列は先ほど生成したLINE側のトークンになりますので、入れ替えてください。
app.js(情報ページからの抜粋)
const lineNotify = require('line-notify-nodejs')('****************************'); // 先ほど生成したトークン lineNotify.notify({ message: 'send test', }).then(() => { console.log('send completed!'); });
こちらを使用して、以下のように実行を行うことで
$ node app.js
メッセージがLINEアプリ側に送信されます。
送信元はLINE Notifyから送信されます(個人から起こるのではなく、個人の持つNotifyというチャンネルから送信されることになります。複数に送信する場合には、事前設定時に自分が所属しているグループ指定を行う必要があります)
今回は表示が[Obniz通知]
となっていますが先ほどLINE側で設定したトークン名がはいりますので、RaspberryPiだけで終わる場合には設定は変更しておいた方がいいでしょう。
Obnizから送信する
無事にNode.jsから送信することができたので、続いてObnizのイベント(ボタンの押下)を使用してメッセージを飛ばしてみます。以下のエントリが非常に参考になります。
まずは、Node.js
とObniz
の連携をするモジュールをインストールします。先ほどインストールしたline-notify-nodejs
も忘れずにインストールしておいてください。
モジュールのインストール
$ npm install obniz $ npm install line-notify-nodejs
インストールの参考 obniz.com
モジュールのインストールが終わったら、以下のようにapp.js
というファイルを作成して、メッセージを送信します。途中にある*
の羅列は先ほど生成したLINE側のトークンになりますので、入れ替えてください。また、XXXX-XXXX
は自分の使用するObnizのデバイスコードになるのでこちらも忘れずに変更してください。
app.js(参考エントリーからの抜粋)
var Obniz = require("obniz"); const lineNotify = require('line-notify-nodejs')('****************************'); // 先ほど生成したトークン var obniz = new Obniz("XXXX-XXXX"); obniz.onconnect = async function () { obniz.switch.onchange = function(state) { if (state === "push") { lineNotify.notify({ message: 'スイッチが押されました' }) } } }
ファイルが完成したら以下のように実行します。
$ node app.js
実行後は待機状態になっているので、Obniz
のボタンを押下すると、以下のようにNotifyメッセージが通知されます。
これで、Node.js
経由でObniz
とLINEの通知メッセージがうまく連携しました。
おわりに
Node.js
を使って、RaspberryPiやObniz
からLINEにメッセージの送信が簡単に行えるようになりました。LINEへの通知ができることもよかったのですが、HTMLを使用しなくてもNode.js
でObniz
で制御できることもわかりましたし。後はコンテストに出すアイデアがあれば…。