DesignSpark Electrical Logolinkedin
  • Brought to you by
  • RS Components
  • Allied Electronics

November 12, 2016 11:12

Follow

Siemens IOT2020 - Node-Red、MQTT、SQLITE3のインストールとテスト

本物のオープンソース産業用ゲートウェイの構築が可能なソフトウェアをインストールしましょう

インストールするソフトウェア 
・Node-Red: 制御フローをグラフィカルに設計・管理
・MQTT: アップストリームシステムに向けたコマンドやデータのパブリッシュ、Edgeノードとの間のサブスクライブ/パブリッシュによるリレーや電源デバイスの制御、温度・湿度・気圧など任意のデータの測定
・SQLITE3: 履歴的なデータを保存・検索して、トレンディングや分析を実行

まずは、インストールの準備として、以下のビデオを参照して作業を行っておく必要があります。

SDカードの作成(英語)
ファイルシステムを拡張してSDカードをフルに使用する方法(英語)

内容の正確さに関する警告: この投稿は、きわめて技術的な内容になっており、すべてを完了するのにはかなりの時間がかかります(所要時間1時間以上) ビデオの作成でさらに時間を要しました。すべてを正確に文書化しようと試みましたが、誤りが残っている可能性もあります。改善可能な箇所や誤りがありましたら、お知らせください。


それでは、データソースとアーキテクチャを設定し、それからNode-Red、MQTT (Mosquitto形式)、SQLITE3 (データベース機能用)をインストールしましょう。
インストールが終了したら、Node-Redで使用できるさまざまなNode-Redモジュールを追加します。さらに、Modbus、GPIO、シリアルなどの機能も追加します。

  1. Configure リポジトリソースとアーキテクチャのパラメータを設定します。
    次のラインを/etc/opkg/arch.confに追加し、下記の太字のラインを追加して、アーキテクチャを更新します。

    arch all 1

    arch any 6

    arch noarch 11

    arch i586 12

    arch quark 13

    arch x86 14

    arch i586-nlp-32 16

    arch i586-nlp-32-intel-common 21

    arch iot2000 26

  2. /etc/opkg/iotdk.confというファイルを追加します。

    次のコンテンツをファイルに挿入します。

    src iotdk-all http://iotdk.intel.com/repos/2.0/iotdk/all
    src iotdk-i586 http://iotdk.intel.com/repos/2.0/iotdk/i586
    src iotdk-quark http://iotdk.intel.com/repos/2.0/iotdk/quark
    src iotdk-x86 http://iotdk.intel.com/repos/2.0/iotdk/x86

  3. 次を実行して、MRAAのリポジトリを追加します。
    echo "src mraa-upm http://iotdk.intel.com/repos/3.5/intelgalactic/opkg/i586" > /etc/opkg/mraa-upm.conf

  4. opkg updateを実行して、リポジトリのローカルリストを更新します。

  5. ここで、nodejs、sqlite3、sshdのバグ修正をインストールします。nodejsのインストール時に破損する場合は、次のコマンドを実行します。

    opkg install nodejs

    opkg install sqlite3

    opkg install sshd

  6. Node-RedとNodeモジュールをインストールして、次のコマンドを実行します(コマンドプロンプトに一括でコピーアンドペーストできます。これにより自動的に動作します)。

    npm install -g --unsafe-perm node-red

    cd

    mkdir .node-red

    cd .node-red

    npm install node-red-dashboard

    npm install node-red-contrib-modbus

    npm install mraa

    npm install galileo-io

    npm install node-red-contrib-gpio

    npm install node-red-contrib-upm

    npm install node-red-contrib-modbustcp

    npm install moment

    npm install node-red-admin

    npm install node-red-contrib-bigtimer

    npm install node-red-contrib-esplogin

    npm install node-red-node-sqlite

    npm install node-red-contrib-timeout

    npm install node-red-node-openweathermap

    すべてのモジュールをインストールしたくない場合は、単純に不要なラインを削除してください。この処理にかなりの時間がかかる可能性がありますが(30分以上)、いずれ完了します。また警告が表示される可能性があります。これは、現行バージョンのOSとこれらのモジュールでは予想されることですが、動作はしているはずです。


  7. これでMosquittoをインストールする準備が整いました。次のコマンドを使ってインストールを実行します。wgetでファイルが見つからない問題がある場合、より新しいバージョンがリリースされている可能性があります。リポジトリを確認して、スクリプトを更新して補正してください。このプロセスについても、完了までかなりの時間がかかる可能性があります。

    cd

    wget http://mosquitto.org/files/source/mosquitto-1.4.10.tar.gz

    tar xzf mosquitto-1.4.10.tar.gz

    cd mosquitto-1.4.10

    # this next step takes a while

    adduser mosquitto

    make WITH_SRV=no

    cd test/broker

    make test

    cd ../../

    cp client/mosquitto_pub /usr/bin

    cp client/mosquitto_sub /usr/bin

    cp lib/libmosquitto.so.1 /usr/lib

    cp src/mosquitto /usr/bin

  8. Node-RedとMosquittoを電源投入時又はリブート時に自動起動するよう設定します。
  9. Node-Redについては、ファイルを作成して次のテキストをペーストします。
    ファイルパス:/etc/init.d/autostart_node_red.sh

    #! /bin/sh

    # for example:

    /usr/bin/node-red -u /home/root/.node-red -v &

    exit 0

  10. Mosquittoについては、ファイルを作成して次のテキストをペーストします。
    ファイルパス: /etc/init.d/autostart_mosquitto.sh

    #! /bin/sh

    # for example:

    /usr/bin/mosquitto &

    exit 0


  11. 権限を追加し、自動起動デーモンが動作するよう設定します。

    chmod +x /etc/init.d/autostart_node_red.sh

    update-rc.d autostart_node_red.sh defaults

    chmod +x /etc/init.d//autostart_mosquitto.sh

    update-rc.d autostart_mosquitto.sh defaults

これでインストールがすべて完了しました。リブートして、すべてが動作するかを確認できます。

 

注意: SQLITE3のテストについては、次のスクリプトを実行して、テーブルを備えたデータベースの作成と権限の設定を行うことができます。また、テーブルによっては、行が数行追加されます。これが不要な場合は、単に使用しないでおくか、テスト後に削除できます。

cd
mkdir dbs
sqlite3 ~/dbs/iot.db << EOF
CREATE TABLE IF NOT EXISTS \`pinDescription\` (
\`pinID\` INTEGER PRIMARY KEY NOT NULL,
\`pinNumber\` varchar(2) NOT NULL,
\`pinDescription\` varchar(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS \`pinDirection\` (
\`pinID\` INTEGER PRIMARY KEY NOT NULL,
\`pinNumber\` varchar(2) NOT NULL,
\`pinDirection\` varchar(3) NOT NULL
);
CREATE TABLE IF NOT EXISTS \`pinStatus\` (
\`pinID\` INTEGER PRIMARY KEY NOT NULL,
\`pinNumber\` varchar(2) NOT NULL,
\`pinStatus\` varchar(1) NOT NULL
);
CREATE TABLE IF NOT EXISTS \`users\` (
\`userID\` INTEGER PRIMARY KEY NOT NULL,
\`username\` varchar(28) NOT NULL,
\`password\` varchar(64) NOT NULL,
\`salt\` varchar(8) NOT NULL
);
CREATE TABLE IF NOT EXISTS \`device_list\` (
\`device_name\` varchar(80) NOT NULL DEFAULT '',
\`device_description\` varchar(80) DEFAULT NULL,
\`device_attribute\` varchar(80) DEFAULT NULL,
\`logins\` int(11) DEFAULT NULL,
\`creation_date\` datetime DEFAULT NULL,
\`last_update\` datetime DEFAULT NULL,
PRIMARY KEY (\`device_name\`)
);
CREATE TABLE IF NOT EXISTS \`readings\` (
\`location\` varchar(20) NOT NULL,
\`value\` int(11) NOT NULL,
\`logged\` timestamp NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS \`pins\` (
\`gpio0\` int(11) NOT NULL DEFAULT '0',
\`gpio1\` int(11) NOT NULL DEFAULT '0',
\`gpio2\` int(11) NOT NULL DEFAULT '0',
\`gpio3\` int(11) NOT NULL DEFAULT '0'
);
INSERT INTO PINS VALUES(0,0,0,0);
CREATE TABLE IF NOT EXISTS \`temperature_record\` (
\`device_name\` varchar(64) NOT NULL,
\`rec_num\` INTEGER PRIMARY KEY,
\`temperature\` float NOT NULL,
\`date_time\` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS \`Device\` (
\`DeviceID\` INTEGER PRIMARY KEY,
\`DeviceName\` TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS \`DeviceData\` (
\`DataID\` INTEGER PRIMARY KEY,
DeviceID INTEGER,
\`DataName\` TEXT, FOREIGN KEY(DeviceID ) REFERENCES Device(DeviceID)
);
CREATE TABLE IF NOT EXISTS \`Data\` (
SequenceID INTEGER PRIMARY KEY,
\`DeviceID\` INTEGER NOT NULL,
\`DataID\` INTEGER NOT NULL,
\`DataValue\` NUMERIC NOT NULL,
\`epoch\` NUMERIC NOT NULL,
\`timestamp\` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , FOREIGN KEY(DataID, DeviceID ) REFERENCES DeviceData(DAtaID, DeviceID )
);
.exit
EOF

cd
chmod 777 ~/dbs
chmod 666 ~/dbs/iot.db
cd

では、テストに向けてNode-Redを設定しましょう。

 

MQTT構成は次のとおりです。もちろんIPアドレスは自身のものを設定します。IPアドレスは、linux sshコマンドプロンプトでifconfigを使用して確認できます。

 

次はModBusノードです。このテストはデバイスに依存するため、TCP modbusデバイスを持っていない場合は実行できません。私の場合は、FLIR AX8産業用サーモグラフィカメラからデータをリクエストしました。

Node-Redでsqlite3の選択ステートメントに使用するコマンドは、この「select * from pins;」で、データベースパスは「/home/root/dbs/iot.db」です。

をクリックすると、下図のようなデバッグ出力が表示されます。

ダッシュボード要素を入力したら、完了ボタンを押して終了し、デフォルトを設定します。これにより、Webブラウザでの表示が可能になります。今後、ビデオで詳しく説明します。

現在使用しているものと同じアドレスをブラウズし、最後に「/ui」を追加します。「http://192.168.1.178:1880/ui/#/0」のようになります(IPアドレス部分は自身のIPアドレス)。

あらゆるスマートデバイス、スマートフォン、デスクトップなどで、ブラウザを使用できるようになります。Chromeを推奨しますが、私が試したブラウザはいずれも使用できました。

最後にMQTTのテストを行います。下図のとおりMQTT Lense (Chromeアドオン)を設定します。IPアドレスは自身のものを入力します。

 

かなり長いですが、必要な手順です。Siemensが、これらのアプリケーションのうちのいくつかでもベースコードに追加してくれれば楽になると思います。しかし、現時点では含まれていないので、この状態を実現するにはこうした手順が必要です。

手順を試してみて、困難なことや問題がありましたら、コマンドを投稿してください。お手伝いします。

 

I started my career in Industrial Electronics Engineering over 40 years ago, I am also a seasoned Software Architect working as a consultant with large companies and government agencies developing software for Healthcare, Online Reporting solutions and large scale high availability data management. My electronics experience is primarily in automation and control of manufacturing and the gas industry This experience has left me with a good sense of Privacy, Security and reliability from the hardware right through to the data storage in central data centers. My passion has always been electronics. I now make tutorial videos for my youtube channel thebreadboardca. ( http://www.youtube.com/thebreadboardca ). I specialise in Industrial and Home Automation and Control and integration of heterogeneous systems, I love to figure out how to get all sorts of disparate things talking to each other using protocols like Modbus, MQTT etc. Getting a new product, Chip or other item, figuring out what can be done with it and then making a tutorial video is fun to me and I love to share what I learn.

November 12, 2016 11:12

Follow