AWS IoT MQTT に Ruby で接続する

AWS IoT にモノを追加する

AWS IoT にアクセスして「モノ」を選択

「モノを作成」をクリック

「1つのモノを作成」を選択して「次へ」

任意のモノの名前を入力して「次へ」

※ ほかの項目はデフォルトでOK

「新しい証明書を自動生成(推奨)」を選択して「次へ」

「ポリシーを作成」をクリック

任意のポリシー名を入力して、以下のようにポリシーを設定して「作成」

「ポリシーをアタッチ」のページに戻って作成したポリシーを選択して「モノの作成」をクリック

証明書をダウンロードし「完了」をクリック

以下の3つをダウンロード

  • バイス証明書
  • プライベートキーファイル
  • Amazon 信頼サービスエンドポイント CA1

※ オプションで パブリックキーファイル、Amazon 信頼サービスエンドポイント CA3 も落としておくと良いかも?

AWS IoT > 管理 > モノ」にモノが追加されていたらOK

エンドポイントの取得

AWS IoT の「設定」ページを表示する

※ 左のメニュー欄の下のほうにある。

「デバイスデータエンドポイント」に表示されている「エンドポイント」をコピーする

ruby-mqtt を使ってパブリッシャーを作る

ruby-mqtt をインストール

gem install mqtt

ruby スクリプト

require "mqtt"

params = {
  host: "amkpd3vnlnx3d-ats.iot.us-west-2.amazonaws.com",
  port: 8883,
  ssl: true,
  cert_file: %q(<デバイス証明書>),
  key_file: %q(<プライベートキーファイル>),
  ca_file: %q(<Amazon 信頼サービスエンドポイント Amazon ルートCA1>),
}

MQTT::Client.connect(params) do |client|
  client.publish("test", "message")
end

実行

MQTT テストクライアントページを表示

※ トピック test をサブスクライブする

ruby スクリプト実行

※ 各証明書は実行ディレクトリと同じ場所に配置しておくこと

ruby main.rb

結果がテストクライアントページに表示される

おまけ

無限に pub しながら sub するスクリプト

require "mqtt"

params = {
  host: "*****",
  port: 8883,
  ssl: true,
  cert_file: "*****",
  key_file: "*****",
  ca_file: "*****",
}

t1 = Thread.new do
  MQTT::Client.connect(params) do |client|
    client.get("test") do |topic, message|
      puts "#{topic} : #{message}"
        end
  end
end

sleep(3)

MQTT::Client.connect(params) do |client|
    loop do
    client.publish("test", "message")
    sleep(1)
    end
end

t1.join