AWS IoT MQTT に Ruby で接続する
AWS IoT にモノを追加する
AWS IoT にアクセスして「モノ」を選択
「モノを作成」をクリック
「1つのモノを作成」を選択して「次へ」
任意のモノの名前を入力して「次へ」
※ ほかの項目はデフォルトでOK
「新しい証明書を自動生成(推奨)」を選択して「次へ」
「ポリシーを作成」をクリック
任意のポリシー名を入力して、以下のようにポリシーを設定して「作成」
「ポリシーをアタッチ」のページに戻って作成したポリシーを選択して「モノの作成」をクリック
証明書をダウンロードし「完了」をクリック
以下の3つをダウンロード
※ オプションで パブリックキーファイル、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