ファイナンス、情報通信技術のスキル・アグリゲーション・サイト

' . iseeit.jp 情報通信技術 . '

Node.js で MQTT クライアント(MQTT.js)

Node.js で MQTT クライアントを作成します。ライブラリは MQTT.js を利用します。また、ブローカーは、Mosquitto を使用しました。

Mosquitto については、Mosquitto(MQTT Broker)を Windows と Ubuntu にインストール も参照してみてください。

GitHub - mqttjs/MQTT.js: The MQTT client for Node.js and the browserMQTT.js/examples/tls client のコードをベースに SSL/TLS の対応などを進めます。

MQTT クライアントについては、Paho(MQTT Client Library)サンプルプログラム(Python、JavaScript) でも取り扱っています。paho-mqtt.js は、npm でインストールして、Node.js でも利用できます。

The Paho JavaScript Client is an MQTT browser-based client library written in Javascript that uses WebSockets to connect to an MQTT Broker.

paho-mqtt - npm

MQTT.js is a client library for the MQTTprotocol, written in JavaScript for node.js and the browser.

mqtt - npm

paho-mqtt.js は、ブラウザベースのクライアントライブラリ、mqtt.js は Node.js とブラウザ用のクライアントライブラリ、という紹介になっています。

次に、かんたんに Node.js とパッケージ管理の npm のインストールをみていきます。

たとえば、Ubuntu 16.04 LTS 標準のままの apt もしくは apt-get でインストールすると、古いバージョンがインストールされます。



$ sudo apt install nodejs

このことをふまえながら Google 検索してみていくと、Ubuntu では、多くの方が n というバージョン管理パッケージを利用しているようです。

npm も含めてインストールは簡単に、という思いもあり、以下のページの手順でインストールを進めました。

https://nodejs.org/en/download/package-manager

LTS( long-term support )版の場合。



$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt install -y nodejs

最新版の場合。



$ curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
$ sudo apt install -y nodejs

この手順では、Node.js とともに npm もインストールされます。また、nodejs コマンドのほか、node コマンドでも使えるようになっています。

次に、npm を利用して、mqtt.js をインストールします。



$ npm install mqtt

続いて、mosquitto.conf の設定例です。



# Default listener
listener 1883
# Certificate based SSL/TLS support
listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
tls_version tlsv1.2
require_certificate true
password_file /etc/mosquitto/passwd

上記の SSL/TLS 証明書の設定では、サーバ証明書を記載しています。今回作成する MQTT クライアントは、クライアント証明書も使用することとしました。 tls_version tlsv1.2 は、TLS バージョンを明示して設定しています。 require_certificate true は、接続するすべてのクライアントがクライアント証明書を必要とします。なお、クライアント証明書のないクライアントも接続する場合、false に設定します。

さらに、パスワードファイルも使用します。バスワードファイルは、 mosquitto_passwd の手順で管理します。作成コマンド例です。



$ mosquitto_passwd -c /etc/mosquitto/passwd ral

さて、今回使用したサーバ証明書やクライアント証明書は、プライベート認証局(CA)を作成して、プライベート SSL/TLS 証明書を発行したものです。この手順については、プライベート認証局でプライベート SSL/TLS 証明書を発行する も参考にしてください。

今回作成した MQTT クライアントのコード例です。



var mqtt = require('mqtt')
var fs = require('fs')

var  _ca_certs = '/etc/mosquitto/certs/ca.crt'
var  _certfile = '/etc/mosquitto/certs/client.crt'
var  _keyfile = '/etc/mosquitto/certs/client.key'
  
var KEY = fs.readFileSync(_keyfile)
var CERT = fs.readFileSync(_certfile)
var TRUSTED_CA_LIST = fs.readFileSync(_ca_certs)

var PORT = 8883
var HOST = 'host.jp'
var _topic ='test'
var _username = 'ral'
var _password = 'ralpasswd'

var options = {
  port: PORT,
  host: HOST,
  key: KEY,
  cert: CERT,
  rejectUnauthorized: false,
  // The CA list will be used to determine if server is authorized
  ca: TRUSTED_CA_LIST,
  protocol: 'mqtts',
  secureProtocol: 'TLSv1_2_method',
  username: _username,
  password: _password 
}

var client = mqtt.connect(options)

client.subscribe(_topic)

client.publish(_topic, 'Current time is: ' + new Date())

client.on('message', function (topic, message) {
  console.log('subscribe->'+message)
})

client.on('connect', function () {
  console.log('Connected')
})

client.on('error', function (err) {
  console.log(err)
  client.end()
})

rejectUnauthorized: false は、プライベート認証局の CA 証明書を使用していることによります。secureProtocol: 'TLSv1_2_method' は、ブローカーの TLS バージョンの設定にあわせたものです。

テストに使用した Mosuitto クライアントコマンドの Subscribe コマンド例です。



mosquitto_sub --cafile /etc/mosquitto/certs/ca.crt --cert /etc/mosquitto/certs/client.crt --key /etc/mosquitto/certs/client.key -t test -p 8883 -h host.jp -u ral -P ralpasswd --tls-version tlsv1.2

テストに使用した Mosuitto クライアントコマンドの Publish コマンド例です。



mosquitto_pub --cafile /etc/mosquitto/certs/ca.crt --cert /etc/mosquitto/certs/client.crt --key /etc/mosquitto/certs/client.key -t test -p 8883 -m Message -h host.jp -u ral -P ralpasswd --tls-version tlsv1.2

ファイナンシャル・プランニング
6つの係数

終価係数 : 元本を一定期間一定利率で複利運用したとき、将来いくら になるかを計算するときに利用します。

現価係数 : 将来の一定期間後に目標のお金を得るために、現在いくら の元本で複利運用を開始すればよいかを計算するときに利用します。

年金終価係数 : 一定期間一定利率で毎年一定金額を複利運用で 積み立て たとき、将来いくら になるかを計算するときに利用します。

年金現価係数 : 元本を一定利率で複利運用しながら、毎年一定金額を一定期間 取り崩し ていくとき、現在いくら の元本で複利運用を開始すればよいかを計算するときに利用します。

減債基金係数 : 将来の一定期間後に目標のお金を得るために、一定利率で一定金額を複利運用で 積み立て るとき、毎年いくら ずつ積み立てればよいかを計算するときに利用します。

資本回収係数 : 元本を一定利率で複利運用しながら、毎年一定金額を一定期間 取り崩し ていくとき、毎年いくら ずつ受け取りができるかを計算するときに利用します。

積み立て&取り崩しモデルプラン

積立金額→年金額の計算 : 年金終価係数、終価係数、資本回収係数を利用して、複利運用で積み立てた資金から、将来取り崩すことのできる年金額を計算します。

年金額→積立金額の計算 : 年金現価係数、現価係数、減債基金係数を利用して、複利運用で将来の年金プランに必要な資金の積立金額を計算します。