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

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

Paho(MQTT Client Library)サンプルプログラム(Python、JavaScript)

MQTT (Message Queue Telemetry Transport) は、Publisher から発信したメッセージを Broker を通じて Subscriber へ配信するプロトコルです。

Paho (MQTT Client Library)を利用して、 Mostuitto (MQTT Broker)に対してメッセージを Publishing、Subscribing するクライアントプログラム例です。

https://mosquitto.org

http://www.eclipse.org/paho/

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

SSL 証明書は、プライベート証明書を作成しました。手順については、「プライベート認証局でプライベート SSL/TLS 証明書を発行する」も参照してください。

Ubuntu 16.04 LTS で実行確認しました。なお、ブラウザでの確認は、Ubuntu 上の Firefox を利用しました。SSL の利用時に CA 証明書のインポートが必要です。

Paho サンプルプログラム(Python)

Python による Paho サンプルプログラムです。

http://www.eclipse.org/paho/clients/python/

Paho の Python ライブラリモジュールをインストールします。



$ sudo pip install paho-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

Paho の Subscribe プログラム例です。



#!/usr/bin/python
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
import ssl

host = 'localhost'
port = 8883
ca_cert = '/etc/mosquitto/certs/ca.crt'
certfile = '/etc/mosquitto/certs/client.crt'
keyfile = '/etc/mosquitto/certs/client.key'

topic = 'test'

def on_connect(client, userdata, flags, respons_code):
  print('status {0}'.format(respons_code))
  client.subscribe(topic)

def on_message(client, userdata, msg):
  print('[' + msg.topic + ']' + str(msg.payload))

if __name__ == '__main__':
  client = mqtt.Client(protocol=mqtt.MQTTv311)

  client.on_connect = on_connect
  client.on_message = on_message

  client.tls_set(ca_cert, certfile, keyfile,
    cert_reqs = mqtt.ssl.CERT_REQUIRED,
    tls_version = mqtt.ssl.PROTOCOL_TLSv1_2,
    ciphers = None)
  client.tls_insecure_set(True)

  client.connect(host, port=port, keepalive=60)
  client.loop_forever()

Paho の Publish プログラム例です。



#!/usr/bin/python
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
import ssl

host = 'localhost'
port = 8883
ca_cert = '/etc/mosquitto/certs/ca.crt'
certfile = '/etc/mosquitto/certs/client.crt'
keyfile = '/etc/mosquitto/certs/client.key'

topic = 'test'

client = mqtt.Client(protocol=mqtt.MQTTv311)

client.tls_set(ca_cert, certfile, keyfile,
  cert_reqs = mqtt.ssl.CERT_REQUIRED,
  tls_version = mqtt.ssl.PROTOCOL_TLSv1_2,
  ciphers = None)
client.tls_insecure_set(True)

client.connect(host, port=port, keepalive=60)
client.publish(topic, 'Message')
client.disconnect()

Paho サンプルプログラム(JavaScript)

JavaScript による Paho サンプルプログラムです。

http://www.eclipse.org/paho/clients/js/

CDN により Paho ライブラリを取り込みます。



<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>

mosquitto.conf の設定内容です。WebSocket を使用します。



# WebSocket listener
listener 11883
protocol websockets

# Certificate based SSL/TLS support
listener 18883
protocol websockets
cafile   /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile  /etc/mosquitto/certs/server.key

HTML5 & JQuery のチャットプログラム風のサンプルです。



<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>MQTT Client Demo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>

  <script type="text/javascript">
function ws_mqtt() {
  // Create a client instance
  // client = new Paho.MQTT.Client("host", port,"client_id"); 
  client = new Paho.MQTT.Client("localhost", 18883, "id_" + parseInt(Math.random() * 100, 10));

  // set callback handlers
  client.onConnectionLost = onConnectionLost;
  client.onMessageArrived = onMessageArrived;
  var options = {
    useSSL: true,
    onSuccess:onConnect,
    onFailure:doFail
  }

  // connect the client
  client.connect(options);

  // called when the client connects
  function onConnect() {
    // Once a connection has been made, make a subscription and send a message.
    console.log("onConnect");
    client.subscribe("test");
  }

  function doFail(e){
    console.log(e);
  }
  // called when the client loses its connection
  function onConnectionLost(responseObject) {
    if (responseObject.errorCode !== 0) {
      $("#chat").prepend("<p>onConnectionLost:"+responseObject.errorMessage+"</p>");
    }
  }
  // called when a message arrives
  function onMessageArrived(message) {
    $("#chat").prepend("<p>onMessageArrived:"+message.payloadString+"</p>");
  }

  $("#chatform").submit(function (evt) {
    var line = $("#chatform [type=text]").val()
    $("#chatform [type=text]").val("")
    message = new Paho.MQTT.Message(line);
    message.destinationName = "test";
    client.send(message);
    return false;
  });

}
  </script>
 </head>
 <body>
  <div id="chat" style="width: 60em; height: 20em; overflow:auto; border: 1px solid black">
  </div>
  <form id="chatform">
  <p>Message</p>
  <input type="text" />
  <input type="submit" value="送信" />
  </form>
  <script type="text/javascript">
window.onload = function() {
  $("#chat").prepend("<p>ONLOAD</p>");
  ws_mqtt();
}
  </script>
 </body>
</html>

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

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

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

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

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

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

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

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

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

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