PythonでMQTTSのpub/subしてみた

技術紹介

開発ブログがご無沙汰となっておりましたが、新型コロナウィルスに負けないように、イーツリーズとしてはリモートワーク体制で技術の仕込みを着々と行っております。

ところで、IoT関連ではMQTTが使われることが多いですね。MQTTは平文で通信されるので、セキュリティが欲しいところではMQTTSを使うことになります。

 

まずはMQTTを、ということで「pythonでMQTT送受信」を参考に動かしてみました。問題ないですね。

そして次にこれをSSL化します。SSLはOpenSSLとか入れなきゃいけないの?とか思いましたが、どうも標準でWindowsのSSLライブラリをPythonから使えるようです。環境はWindows10 Homeに、Python-3.8.1をインストールしています。

sample_sub.py, sample_pub.pyに、SSLのコンテキストを作って設定してあげるだけで行けました。

たとえば、sample_pub.pyのほうだと、import sslはしておくとして、

# メイン関数 この関数は末尾のif文から呼び出される
def main():
  ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)   # SSL対応で追加

  client = mqtt.Client() # クラスのインスタンス(実体)の作成
  client.tls_set_context(context=ssl_context)   # SSL対応で追加
  client.on_connect = on_connect # 接続時のコールバック関数を登録
  client.on_disconnect = on_disconnect # 切断時のコールバックを登録
  client.on_publish = on_publish # メッセージ送信時のコールバック
  client.connect("localhost", 8883, 60) # 接続先は自分自身

のように、MQTTのクライアントを生成した後に、tls_set_contextするだけですね。

見た目はかわらないのであれですが、subscribe側はちゃんと受信できています。

ちなみに、MQTTSのサーバはmosquitto-1.6.8を使っています。

 

Let’s IoT !

(船田)

コメント

タイトルとURLをコピーしました