Skip to main content

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

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

 

With a background in Industrial Electronics, Solutions Architecture and programming, I now spend my time working on my YouTube channel ( https://www.youtube.com/thebreadboardca ) where I create educational videos showing how to use various devices including Test and measurement, Home and industrial Automation, Components and other fun things I am sent to review or include in projects. I will also create many projects to showcase the use of these items
DesignSpark Electrical Logolinkedin