センサーのログを取得・蓄積する仕組みの作り方(Node-RED + MongoDB Atlas)
- 1 概要
- 2 センサー取得データを取得する仕組み(Node-RED)の構築
- 2.1 Node-REDのインストールと起動
- 2.1.1 手元のパソコン上に、Node-RED環境を構築する場合
- 2.1.1.1 仮想マシンを用意する
- 2.1.1.2 作業環境
- 2.1.1.3 インストールスクリプトを使ってインストールを始める
- 2.1.1.4 構築したNode-REDを一時的に、インターネット上に公開したい場合
- 2.1.2 パブリッククラウド上でインストールを行う場合
- 2.1.1 手元のパソコン上に、Node-RED環境を構築する場合
- 2.2 Node-REDの初期セットアップ
- 2.3 MongoDB接続ノードのインストール
- 2.1 Node-REDのインストールと起動
- 3 センサー取得するデータベース(MongoDB Atlas)の導入
- 4 Node-REDにMongoDBを接続する
- 5 データの可視化
- 6 応用課題
概要
この教材では、IoTでお馴染みのセンサーを取得するところではなく、取得したデータを整形し、NoSQL型のデータベースシステムに蓄積、可視化する仕組みについて、自分で構築して学びます。
センサーを使ってデータを獲得する部分は、ArduinoやRaspberry Pi などいろいろありますが、プログラミングが苦手、書く時間が面倒な場合は、obniz が手軽です。obniz によるクラウドからのIoTデバイス遠隔制御
センサー取得データを取得する仕組み(Node-RED)の構築
Node-REDのインストールと起動
Node-REDの用語を改めて確認するには、https://nodered.jp/docs/user-guide/concepts をご覧ください。
手元のパソコン上に、Node-RED環境を構築する場合
仮想マシンを用意する
例として、仮想環境としてVirtualBoxを使っていますが、他の仮想環境でも構いません。以前に使ったものがあれば、それを複製(クローン)し、仮想マシンのIPアドレスとホスト名を変更すると、一から用意せずに手軽です。また、パソコン上に仮想マシンを用意せずに、パブリッククラウドの「PaizaCloud」を使うことも可能です。
< 以下は、VirtualBoxを使った場合の例 >
仮想マシンのスペック例
OS:Ubutnu Server 22.04
仮想CPU割り当て数 : 1
仮想メモリ割り当て:2048MB(2GB)以上
仮想ディスク:40GB以上
ネットワーク設定:NAT + ホストオンリーアダプタの構成。ホストオンリーアダプタには、固定IPを割り当てること。
デスクトップ環境:なし
SSH接続:必須 ( ユーザー名 + パスワードでもOK )
仮想マシンの設定例
ホストオンリーアダプタの固定IP例:192.168.125.155
Your server’s name (ホスト名):ubuntu1iot
ユーザー名 : vboxuser
パスワード:任意のもの
作業環境
仮想マシンを実行しているパソコンから、ターミナルアプリ(Windowsなら「Tera Term」, Macなら「Terminal」)を使い仮想マシンの固定IPにSSH接続し、作業を行いましょう。
インストールスクリプトを使ってインストールを始める
Ubuntu 22.04 で実行している。なお、Raspberry Pi でも以下と同じ手順で、Node-REDのインストールと自動起動ができる。
sudo apt update -y
sudo apt install -y build-essential git curl
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
下記のメッセージが表示される。y を入力してEnterキーを押す。
Are you really sure you want to do this ? [y/N] ? y
下記のメッセージが表示される。y を入力してEnterキーを押す。
Would you like to install the Pi-specific nodes ? [y/N] ? y
下記のメッセージが表示される。N を入力してEnterキーを押す。
自動起動設定を適用
Node-REDを起動する
構築したNode-REDを一時的に、インターネット上に公開したい場合
ngrokを使うことで実現できます。ngrokによるローカル環境の公開手順
パブリッククラウド上でインストールを行う場合
無料かつパブリッククラウドで、Node-REDを使う場合は、「enebular」があります。
AWSやMicrosoft Azure , IBM Cloud , Oracle Cloud 等の場合、OSとしてUbuntuを選択していれば前述のインストールスクリプトを使った方法で出来ます。Red Hat 系(Oracle Linuxを含む)の場合は、インストールスクリプトがUbuntuとは異なるため、RedHat系のインストールスクリプトは下記にてご確認ください。
Node-REDの初期セットアップ
Webブラウザで、http://仮想マシンのIPアドレス:1880(例 http://192.168.125.155:1880 )にアクセス。「Node-RED 3.0へようこそ!」画面の右上にある「X」をクリックして、「Node-RED 3.0へようこそ!」を閉じる。「開始」を押して、画面の説明を見ても良い。
MongoDB接続ノードのインストール
Node-REDの画面で、画面右上の「三」>>「パレットの管理」の順にクリック。
「ノードを追加」タブに切り替え、「mongodb-aleph」で検索。「node-red-contrib-mongodb-aleph」が見つかるので、「ノードを追加」をクリック。aleph は、ヘブライ文字の一文字目で、英語で言うところの「a」に相当するらしい。
確認のメッセージが表示されるので、「追加」をクリック。
追加作業が終わると下図のようなメッセージが表示される。
Node-REDの画面左端のサイドバーを「パレット」という。パレットに「mongodb-aleph-in」と「mongodb-aleph-out」が表示されていることを確認する。
センサー取得するデータベース(MongoDB Atlas)の導入
MongoDB Atlas の契約(クラウドNoSQL DB)
クラウド版のMongoDBを使います。
https://www.mongodb.com/ja-jp << にアクセスします。画面右上の「Try Free」をクリックします。MongoDB Atlas(クラウドサービス)の無料プランでセットアップされます。
「Sign up」画面で、ユーザー登録を行う。名前、姓、メールアドレス、任意のパスワードを入力後、「I agree to the Terms of Service and Privacy Policy.」にチェックを入れ、「Create your Atlas account」をクリックします。
下図のようなイラストが表示され、登録したメールアドレス宛に、確認メールが届きます。
「Verify Your MongoDB Email Address」という件名のメールです。「・・・mongodb.com さんからのコンテンツを信頼します。」をクリックすることで、メールには以下のようが画像が表示されます。メール内の「Verify Email」をクリックします。
「Continue」をクリックしましょう。
MongoDB Atlas にログイン
https://account.mongodb.com/account/login << にアクセスします。まず最初に登録したメールアドレスを入力し、「Next」をクリックします。
次は、登録したパスワードを入力し、「Login」をクリックします。
下図のような質問は、初回に聞かれずに、2回目以降にログインした時にこの画面が出ることもある。どんな目的でMongoDB Atlasを使うのか聞かれるので、今回はAPIがメインでJavaScriptを使うとして、「Finish」をクリック。他の回答でも良い。
多要素認証の設定を勧められますが、後でも出来るので「Remind me later」をクリックします。
「Close」をクリックします。こちらの設定も後でやっても良いでしょう。
データベース(MongoDBクラスター)の作成
クラスターの作成
「Build a Database」をクリックします。
「Next」をクリックします。「Cluster0」という名称のクラスターが作成されます。特にこだわりがなければ「Auto Setup」を使います。AWS、GCP、AzureのいずれかにMongoDBの環境を構築してくれます。「Manual」を選ぶことで、マルチクラウド構成も取ってくれます。
表示されている「Username」と「Password」をメモしておきます。「Copy」を押すとパスワードを取得することができます。その後、「Create Database User」をクリックします。
「Choose a connection method」をクリックします。
MongoDB Atlas への接続方法についてガイドをしてくれます。ここでは「Close」をクリックするか、「X」をクリックします。
MongoDB Atlas上で、クラスターが作成されました。AWS 東京リージョンで稼働していることがわかります。また、「Connect」をクリックすると、上の図が再び表示され、MongoDB Atlasに接続するための情報や手順を確認することができます。
データベースの作成
「Browse Collections」をクリックします。
「+Create Database」をクリックします。
「Create Database」の画面が表示されます。「Database name」と「Collection name」にそれぞれ入力し、「Create」をクリックします。「Database name」と「Collection name」は英数字のみです。
クラスター内にデータベースを作成することができました。このデータベースは、NoSQLです。RDBではありません。
画面左側の「Database」をクリックして、データベース(MongoDBクラスター)の画面に切り替えます。
アクセスするIPアドレスの制限を行う
画面左側の「Network Access」をクリックします。
初期状態では、今現在あなたが利用しているネットワークのグローバルIPアドレスが設定されています。今いるところと別の場所からMongoDBに接続する場合は、この画面で「EDIT」をクリックして変更します。今使っているネットワークのグローバルIPアドレスを知りたい場合は、 にアクセスするとわかります。
「Edit」をクリックすることで、IPアドレスの書き換えができます。書き換え後、「Confirm」をクリックします。これで書き換え完了です。
変更が反映されるまで待ちます。Statusが、Active になるまで待ちましょう。
画面左側の「Database」をクリックして、データベース(MongoDBクラスター)の画面に切り替えます。
データベース画面。
Node-REDにMongoDBを接続する
センサー情報を集約する仕組みとしてのNode-REDを使い、集めたデータをMongoDBに送信できるようにします。
接続情報の取得
「Connect」をクリックします。
接続方法についてガイドが表示されますので、「Drivers」をクリックします。
プログラミング言語別の接続情報が表示されます。「Driver」の箇所を変更することで、PythonやJava等を使う場合のMongoDB Atlas内のデータベースへの接続情報を確認することができます。ここでは、Node-REDを接続先とするため、「Driver」は「Node.js」になります。
3. Add your connection string into your application codeに表示されている2行程度のコードをコピーします。メモ帳アプリ等に貼り付けておきます。2行程度のコードに書かれている情報を使って、Node-REDに接続します。コピー後、「Close」をクリックします。
Node-REDから、MongoDBに接続する
サンプルフローを使って、Node-REDからMongoDBの接続方法を確認
接続を確認するために、Node-REDに以下のサンプルを読み込みます。Node-REDの画面右上の「三」>>「読み込み」の順ににクリックします。「フローを読み込み」画面で、下記のコードをコピー&ペーストします。
「読み込み」をクリックします。
「MongoDB 接続サンプル」のタブが追加されます。
「myDB@….」と表示されているノード(箱状の部品)をダブルクリックします。これは、「mongodb-aleph-out」を使っています。
「mongodb-aleph-outノードを編集」画面が表示されます。ペン型のアイコンをクリックします。
「ホスト」は、MongoDB Atlasの画面でコピーした「mongodb+srv://…」で始める2行の文字列から、@より後、/(スラッシュ)の手前までをコピーし、貼り付けます。例 cluster0.abc2cba.mongodb.net 。
「データベース」は、MongoDB Atlasで作成したデータベース名 を入力します。例 myDB
「ユーザ」は、クラスターを作成した際にデータベースのユーザー名を表示されたものを入力します。
「パスワード」は、クラスターを作成した際にデータベースのパスワードに表示されたものを入力します。4つの値を入力後、「更新」をクリックします。
「コレクション」には、MongoDBでデータベース作成時の作成したコレクション名を入力します。例 myCollection
「操作」には、「insert」を指定します。その後、「完了」をクリックします。
画面右上の「デプロイ」をクリックします。
「inject」ノードのボタンをクリックします。「inject」ノードの中身は、temprature という変数に、28 という数値が挿入され、次の処理でデータが引き渡されます。
MongoDB Atlasのデータベース画面を見ると、Node-REDから届いたJSON形式のデータが、データベースに蓄積されていることがわかります。データベース画面から、「Browse Collections」をクリックすることで確認することができます。
サンプルとして動かしたフローの説明
「inject」ノードをダブルクリックすることで、送信する数値を変更することができます。
変更後、「完了」をクリックします。その後、画面右上の「デプロイ」をクリックします。
数値を変更後、「injectノード」のボタンをクリックします。これを数回繰り返します。数回繰り返すことで、異なる値のデータが、データベースに蓄積されます。
「inject」ノードは、数値を送るためだけに使っています。実物のセンサーがある場合は、Raspberry PiやM5Stack、obniz 等を経由でセンサー情報を受け取るように変更しましょう。obnizを使っている場合は、例として があります。実物のセンサーがある場合は、MQTTなどを使い、センサーのデータを取得し、それを後続のfunctionのノードで、MongoDB向けに整形することになります。
「funtion 1」となっているfunctionノードをダブルクリックして開くと、MongoDBに送信するためのデータ加工の手続きについて記載してあります。
ここでは、functionノードの直前のノードから届くデータの他に、「msg.type」にはセンサーの識別名、「msg.date」にはデータの取得日時といった追加情報を記載しています。functionノードから線が伸びているノードは、mongodb-aleph-out ノードで、MongoDBにデータ送信されます。functionノードを編集した場合は、「完了」をクリックします。その後、画面右上の「デプロイ」をクリックします。
「debug 1」と表示している「debug」ノードは、オブジェクト全体を取得し、Node-REDの画面右側のデバッグタブに、処理したデータを表示します。
画面右側のデバッグタブには、以下のように表示されます。ゴミ箱アイコンをクリックすると、デバッグログを削除することができます。
データベースに蓄積したデータを可視化してみる
データの可視化
データベース画面で、「VISUALIZE YOUR DATA」を使って可視化を行う方法
MongoDBに蓄積したデータ、今回のサンプルでは、日付と時間、温度(仮のデータ)を蓄積していますので、折線グラフで表示できるようにします。
データベース画面で、「VISUALIZE YOUR DATA」をクリックします。ここでは、データベース名を「myDB」、コレクション名を「myCollection」としています。
「Select Data Source」の画面が表示されます。「Project」で、使っているクラスター(例として、Cluster0)、データベース内のコレクションで、「Select」をクリックします。ここでは、Node-REDに接続しているデータベースおよびコレクションを選択します。
「Add Chart」画面が表示されます。画面左側の「FIELDS」には、データベース内の項目(フィールド)を、「X Axis」や「Y Axis」にドラッグ&ドロップします。まずはドラッグ&ドロップする前に、「CHART TYPE」折線グラフように「Discrete Line」に変更します。
温度を時系列で折線グラフで表示したいので、「CHART TYPE」が「Discrete Line」になっていることを確認し、「X Axis」と「Y Axis」を下図のように設定します。設定後、「Save and close」をクリックします。
「Save to」の画面が表示されます。「Dashboard title」を入力し、「Save」をクリックします。
ダッシュボードが表示され、作成したチャート(温度を時系列で表示する折線グラフ)を表示することができます。
Charts タブから可視化を行う方法
データベース画面内の「Charts」タブをクリックします。
「Welcome to Charts」のメッセージが表示されます。「Start」をクリックします。
データの可視化は、「Chart builder」を使います。「Select」をクリックします。可視化のためのチャート作成画面が表示されます。
作成済みダッシュボードの表示
データベース画面内の「Charts」タブをクリックすることで、ダッシュボード画面に切り替わります。作成済みのダッシュボードをクリックすることで、チャートを表示することができます。
そのほかの可視化方法
<< MongoDBは、この教材で扱ったMetabaseと接続できるため、Metabaseを使って、MongoDBに蓄積したデータを可視化しても良いでしょう。
応用課題
obniz ボードとセンサーを使って、センサーの計測値をMongoDB Atlasに蓄積できるようにしてみよう。
MongoDBでは、UTC(世界標準時)の時刻データを格納しています。日本時間に対応する場合は、どうしたら良いか考えてみよう。