AWS IoTにmqttcliからつなぐ

mqttcli という、CLIで動くMQTTクライアントを開発し、公開しています。

AWS IoTに対して、このmqttcliから接続してみましょう。

mqttcliのダウンロード

mqttcli files から、

  • Linux (arm/amd64)

  • FreeBSD (arm/amd64)

  • darwin (amd64)

  • Windows (amd64)

が用意してありますので自身のアーキテクチャにあったバイナリをダウンロードして下さい。その後、 chmod u+x mqttcli と実行権限を付与して下さい。

AWS IoTでthingsを作る

  1. AWSコンソールから AWS IoT を開きます。

  2. Create Resource から Create Thing を選びます

  3. Nameを入力して、 Create を押します

  4. 下の一覧に先ほど入力した名前のThingが出てくるので、選択し、右のタグから Connect a Device をクリックします。

  5. Connect a Device という画面が出てくるので、 NodeJS を押し、 Generate Certificate and Policy を押します

  6. 10秒ぐらい経つと、

  • Download Public Key

  • Download Private Key

  • Download Certificate

という三つのファイルをダウンロードするように指示されるので、全部ダウンロードしておきます。

  1. Confirm & Start Connecting を押します。すると、以下の様なJSONが表示されるので、コピーして、ファイルに保存しておきます。

    {
      "host": "A3HVHEAALED.iot.ap-northeast-1.amazonaws.com",
      "port": 8883,
      "clientId": "something",
      "thingName": "something",
      "caCert": "root-CA.crt",
      "clientCert": "2a338xx2xxf-certificate.pem.crt",
      "privateKey": "aad380efffx-private.pem.key"
    }
    
  2. root-CA.crt というファイルを AWS IoT SDKのここ に書いてあるとおり、 こちらのSymantecのページ から取得してください。

  3. 先ほどダウンロードした三つのファイルとJSONファイル、そして、 root-CA.crt を同じディレクトリに置いて下さい。

以上で準備は終わりです。

AWS IoTに接続

ファイルを入れたディレクトリに移動し、 以下のようにmqttcliを起動します。 -t でtopicを指定しますが、 $ をエスケープする必要があるかもしれません。 --conf で指定するのは先ほど保存したJSONファイルです。 -d はデバッグ用です。

$ mqttcli sub -t "\$aws/things/something/shadow/update" --conf something.json -d
INFO[0000] Broker URI: ssl://A3HVHEAALED.iot.ap-northeast-1.amazonaws.com:8883
INFO[0000] Topic: $aws/things/something/shadow/update
INFO[0000] connecting...
INFO[0000] client connected

と出れば成功です。MQTTで接続できています。

Thing Shadowを更新

Thing Shadowを更新するには以下の様なJSONを送ります。

{
  "state": {
    "reported": {
      "from": "mqttcli"
    }
  }
}

mqttcliで送ってみましょう

echo '{"state": {"reported": {"from": "mqttcli"} } }"' | mqttcli pub -t "\$aws/things/something/shadow/update" --conf something.json -d -s

これで、AWS Consoleから見ると、stateが書き換わっているはずです。

このように、mqttcliとを使って、AWS IoTを触ることが出来ました。同様のことがmosquitto_subでもできることを確認しています。

さいごに

MQTTを直に叩くのではなく、AWS IoTのSDKを使いましょう。そうすればこんなふうにMQTTを意識する必要はありません。

Comments

comments powered by Disqus