このエントリーをはてなブックマークに追加

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を意識する必要はありません。