先回、社内IoTを、Windows PC+mosca+Node-REDで構築した。しかしWindowsのNode-REDはWindowsサービスではないので、ログアウトとかするとアプリが終了してしまう。
(普通の実行ファイルをWindowsサービス化する方法は、いろいろあるようだが、ここでは不採用とする)

今のシステムは、純粋に社内(LAN内)でしか使わないIoTなので、AzureやHerokuのような社外サーバーを使わないで運用したい。そこで社内で常時稼働しているサーバーといえばNASだ。
このNAS(QNAP)で、mqtt-brokerとNode-REDが動かせないものかと、前々からチャレンジしているのだが、うんざりするほど壁※にぶつかって、なかなか実現しなかった。

※QIoT Suite Liteへのログインができない、応答が返ってこなくなる、Dockerでコンテナのインストールがエラーになるなど、トラブルだらけだった。

今回、ようやく成功したので、紹介することにする。当方は本籍がWindows OSなので、誤った認識があるかもしれないことを、あらかじめおことわりしておく。

○そもそもQIoT Suite Liteじゃダメなのか?
結論から言えば、IoTデバイスからの値(温度とか)が1つだけということが前提になっているような仕様で、どうにもなじめなかったた。
工夫次第では、いろいろ回避もできると思うのだが、すでに運用しているシステムを、QIoT Suite Liteの仕様に合わせるメリットはないと感じた。
となると、独自にmqtt-brokerとNode-REDをインストールして稼働させる必要がでてくる。幸いにもQNAPのNASはDockerによって簡単にIoTサーバー群の構築ができる仕組みが備わっている。

○Dockerとは
Dockerが何かは、ここでは詳しい説明は省略するが、ざっくりいうと、仮想マシンを構築するシステムだ。仮想マシンを動かす場合、土台となるホストOSと、仮想マシン(ゲストOS)の2種類で構成される。前記のサーバーを動かすのは仮想マシン(以下、コンテナと称す)上なので、実機(NAS)とは別のユニークなIPアドレスを持つことを理解しておく必要がある。

このリンクをクリックすると、Node-REDのエディタが開く。

○Container StationとDocker
Container Stationは、DockerをGUIで使うためのアプリのようだ。Node-REDだけかもしれないが、コンテナイメージのバージョンが低い
Container Stationを使えば、マウスクリックだけで、コンテナの導入ができるが、アップデートとかの機能はない。
そうなると、telnetで接続して、コマンド操作が必要になってくる。結局、Container Stationのコンテナは削除して、最新版のNode-REDのコンテナイメージで構築し直した。

○mosquittoサーバーのIPアドレスとポート
Node-REDのmqtt-inノードやmqttt-outノードで、ブローカサーバーを指定する必要がある。このブローカサーバー(mosquitto)のアドレスとポート番号を知る必要がある。
結論から言えば、アドレスは実機(NAS)のIPアドレスとなる(ブローカサーバーはコンテナなので、実機とは別なIPアドレスを持つが、今回は意識する必要はない)
ポートの方は、下記で調べられる。

mosquittoの設定をクリックする

コンテナの詳細設定をクリックする

ネットワークをクリックするとポートフォワーティングという項目がある。このホストの部分が、ポート番号となる。
ホストのポートはを1883に書き換えた。(初期値のままだと、このポート番号は起動するたびに変わってしまうっぽい)
つまり、このポートフォワーティングは、実機(NAS)のIPアドレス:1883宛てのTCPパケットを、コンテナのIPアドレス:1883に送るという意味だ。

よってNode-REDのブローカーサーバー設定は、下記のようになる。(実機(NAS)のIPアドレスを192.168.1.17とする)

さあ、これでQNAP NASさえあれば※1、無料でmqtt-brokerとNode-REDが使えることはわかった。外部に公開しないサービス※2ならこのNASだけで十分である。

※1.Dockerが使えない機種(CPU)もあるので注意すること。
※2.外部に公開するサービスはセキュリティの問題もあるので、Herokuとかの外部サーバーをお勧めする。
以上