WindowsのNode-REDに、「MQTT→SQL Serverへinsert」させる (全3回:第1回 Node-REDのサービス化)

製造業向けIoT担当です。
製造業界隈によくある環境(Windows&SQL Server)で、MQTTメッセージ→SQL Serverへinsertの動作確認ができるまでをセットアップしてみます。
これで、M2MのPoCが捗ると幸いです。
まとめ(手順サマリ)
第1回 Node-REDのサービス化(今回)
1.PackageManagementのインストール(パッケージ管理環境を整えます。その1)
2.Chocolateyのインストール(パッケージ管理環境を整えます。その2)
3.nssmのインストール(サービス化ツール)
4.Node-REDのインストール
5.nssmで、Node-REDのサービス化
第2回 MQTTメッセージブローカーの設定
1.Erlangのインストール(RabbitMQの動作用)
2.RabbitMQのインストール(メッセージミドルウェア)とMQTTブローカ追加
第3回 MQTTメッセージ→SQL Serverへinsertのフローを作成
1.Node-REDのパレットに、MSSQLノードを追加
2.フローを作成
1. PackageManagementのインストール
PackageManagementは、Windowsのパッケージ管理ツールです。
Windows10は、Powershell 5.0が標準装備のため、PackageManagementが標準装備されています。
今回は、Windows7を利用しているので、PackageManagementを導入します。
1.1. .Net Framework 4.5.2の確認
「コントロールパネル」→「プログラムと機能」で、
.Net Framework 4.5.2以上の.Net Framework があることを確認します。
ない場合、インストールをしてください。
1.2. Windows Management Framework 5.1のインストール
https://docs.microsoft.com/ja-jp/powershell/wmf/5.1/install-configure
から、ダウンロードします。
環境に応じて、選択してください。
今回は、Windows7で64bitなので、「Win7AndW2K8R2-KB3191566-x64.zip」を選択します。
1.3. Windows Management Framework 5.1のインストール実行
「Win7AndW2K8R2-KB3191566-x64.zip」を任意の場所へ展開します。
Install-Wmf5.1.ps1と実態ファイルがあることを確認して下さい。
1.4. PowerShell でインストールスクリプトを実行
PowerShell を管理者で実行し、その ZIP ファイルの内容を含むフォルダーに移動します。
Install-Wmf5.1.ps1 スクリプトを実行(.\Install-WMF5.1.ps1)して、指示に従って続けます。
“[R]一度だけ~”を選択→「Enter」
「はい」→「同意します」→「今すぐ再起動」
1.5. PowerShell でインストールされたか確認
PowerShellを起動し、「Get-Command -Module PackageManagement」で、リストが出力されることを確認します。
1.6. (必要に応じて)PowerShell 用のプロキシ設定
参考です。
プロキシがある場合、「C:\Users\[ユーザ名]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1」にファイルを作成し、以下を記述した上で、PowerShellを再起動(終了→起動)します。
$user = "<ユーザ名>" $password = "<ユーザパスワード>" $proxyhost = "<指定のプロキシホスト名か、IPアドレス>(:<ポート>)" $proxyaddress = "http://$($proxyhost)/" $env:http_proxy = "http://$($user):$($password)@$($proxyhost)" $env:https_proxy = "http://$($user):$($password)@$($proxyhost)" $env:ftp_proxy = "http://$($user):$($password)@$($proxyhost)" $password_secure = ConvertTo-SecureString $password -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential $user, $password_secure $proxy = New-Object System.Net.WebProxy $proxyaddress $proxy.Credentials = $creds [System.Net.WebRequest]::DefaultWebProxy = $proxy $env:chocolateyProxyUser = $user $env:chocolateyProxyPassword = $password $env:chocolateyProxyLocation = $proxyaddress
2. Chocolateyのインストール
https://blogs.msdn.microsoft.com/mvpawardprogram/2014/10/06/package-management-for-powershell-modules-with-powershellget/
より。
既存の NuGet や Chocolatey を 1 つの Provider として位置付け、PowerShell 上から共通インターフェースでそれらを扱える仕組みを構築します。
2.1. 実行ポリシーの確認
PowerShell で、「Get-ExecutionPolicy」で”RemoteSigned”であること。
2.2. PowerShell でChocolateyのインストール
PowerShell で、「iex ((new-object net.webclient).DownloadString(‘https://chocolatey.org/install.ps1’))」と入力/
実行後、「choco list -lo」で、「Chocolatey v0.10.11」と出力されれば、完了です。
・・・・
2.3. ChocolateyをPackageSourceに加える。
「Get-PackageProvider Chocolatey -ForceBootstrap」で、パッケージプロバイダとして追加します。
3. nssmのインストール
Windowsで、 exeでも bat(バッチ)スクリプトでも、サービス化できるツールです。
引き続き、PowerShell で作業を行います。
3.1. PowerShellコンソールで、nssmがパッケージ管理されていることを確認
「Find-Package -Name nssm」
3.2. nssmのインストール
chocoから、インストールします。「choco install nssm」
(「Install-Package NSSM」で実施してみたのですが、インストールできていないので、「choco install nssm」でインストールしています。)
4. Node-REDのインストール
ハードウェアデバイスAPIおよびオンラインサービスを接続するためのツールです。
4.1. nvm-windowsのインストール
Node-REDは、Node.js LTS(8.x.)が必要です。
PackageManagement導入前に、Node.jsを導入していたため、nvm-windowsの導入を記載します。
nvmを初めて導入される方は、「Find-Package -Name nvm」で、パッケージ管理されているので、PackageManagementで導入ください。
下記より、「nvm-setup.zip」をダウンロードします。
https://github.com/coreybutler/nvm-windows/releases
展開後、「nvm-setup.exe」でインストールできます。
!注意!一番上は、「Pre-release」となっているので、「Latest release」から選択ください。
4.2. Node.js LTS(8.x.)のインストール
コマンドプロンプトで、以下を実行ください。
nvm list available (Node.jsのリスト)
nvm list (Node.jsのインストールバージョン確認)
nvm install 8.11.2 (Node.jsの最新をインストール)
nvm use 8.11.2 (最新に切り替え)
4.3. node-REDのインストール
コマンドプロンプトで、以下を実行ください。
npm install -g node-red
4.4. node-REDの動作確認
コマンドプロンプトで、以下を実行ください。
node-red (起動までに、約3分かかります)
「Server now running at http://127.0.0.1:1880/」の行が表示されたら、
ブラウザで「http://127.0.0.1:1880/」を入力すると、Node-REDが表示されます。
画面が表示されたら、コマンドプロンプトのプロセスを終了させてください。
よくあるエラー
●5分以上待って、「Server now running at http://127.0.0.1:1880/」の行がコマンドプロンプトに表示されない場合、他のプロセスがポートを使っている可能性が高いです。
その場合、「C:\Users\<ユーザ名>\.node-red\settings.js」の「uiPort: process.env.PORT || 1880,」を検索して、1880を他のプロセスが利用していないポートに変更ください。
●ブラウザで「http://127.0.0.1:1880/」を入力しても、画面が表示されない場合は、ファイアウォールで、ポートを塞いでいると思います。
5. nssmで、Node-REDのサービス化
5.1. nssmの起動とNode-REDのサービス設定
コマンドプロンプトで、「nssm install」とすると、GUIが立ち上がります。
以下の要領で、設定ください。
Applicationタブ
Path:<nvmのインストールディレクトリ>\v8.11.2\node-red.cmd
Start directory:C:\Users\<ユーザ>\.node-red
Arguments:–settings “C:\Users\<ユーザ>\.node-red\settings.js”
Service name:node-red
Log onタブ
インストールしたユーザを設定しておきます。
I/Oタブ(初期状態では、右に隠れています。)
Output C:\Users\<ユーザ>\.node-red\stdout.log
Error C:\Users\<ユーザ>\.node-red\stderr.log
Timestampにチェック
File rotation(I/Oタブの右隣りにあります。)
「Replace existing~」にチェック
! 常時運用する場合、「Rotate files」以降を定義ください。
編集後、「Edit service」で、完了です。
5.2. node-redサービス開始
サービスを確認すると、Service nameに入力した名前で追加されています。
再編集する場合は、コマンドプロンプトで、「nssm edit node-red」で編集できます。
node-redサービスを開始すると、ブラウザで「http://127.0.0.1:1880/」にアクセスできます。
【参考】
第1回 Node-REDのサービス化
第2回 MQTTメッセージブローカーの設定
第3回 MQTTメッセージ→SQL Serverへinsertのフローを作成
ホームページ http://www.ois-yokohama.co.jp
facebook https://www.facebook.com/orientalinformationservice/