見出し画像

IoT で使用する Amazon CloudWatch - その5

前回( IoT で使用する Amazon CloudWatch - その4 )は AWS CLI を使用して Amazon CloudWatch にデータを登録する方法について書きました。

今回は Amazon CloudWatch に登録したデータの可視化についてです。

Kanazawa IoT では、今まで数回テーマを決めて選定したキットを使ったハンズオンを開催しました。

第1回のハンズオンで作ったのは、温度湿度気圧センサモジュールの BME280 で計測した温度・湿度・気圧を Raspberry Pi から Amazon CloudWatch に登録して可視化するというリモートセンサーのシステムです。

まずはTからIまで一式購入&全部やるぜハンズオン
〜 温度センサーからデータを無線で収集、クラウドにあげてWebブラウザでグラフ化まで 〜
https://kziot.connpass.com/event/49802/

作ったものはこんな感じ(当日のスライドより)

実際にできあがったものがこちら。ブレッドボードがセンサー部で Raspberry Pi とは ZigBee で通信するリモートセンサーになっています。

組み立てたものを自宅で動かしていますが、計測した結果はこのようなダッシュボードで可視化しています。

カスタムメトリクスのグラフ化

Raspberry Pi からは前回の記事で紹介した AWS CLI を使用して、Amazon CloudWatch にデータを登録しています。

実際に動かしているコードはこちら。このRubyコードをcronで1分毎に動かしています。

# coding: utf-8

NAMESPACE = ENV['MYNAME'] || 'aiba'
DEVICE_ID = 'BME280'

require 'bigdecimal'
require 'rubygems'
gem 'serialport','>=1.0.4'
require 'serialport'
require 'time'

def parse(line)
  values = {}
  line.to_s.strip.split(':').each{|item|
    set = item.split("=", 2)
    key = set[0]
    value = set[1]
    next if key.nil?
    values[key] = value
  }
  return values
end

def put_metric_data(metric_name, timestamp, value)
  cmd = "aws cloudwatch put-metric-data --namespace \"#{NAMESPACE}\" --dimensions DeviceId=#{DEVICE_ID} --metric-name \"#{metric_name}\" --timestamp #{timestamp} --value #{value}"
  puts cmd # コマンド表示
  puts system cmd # 実行 & 結果表示(成功すると true 失敗すると false が表示される)
end

serialport = SerialPort.new('/dev/ttyUSB0', 115200, 8, 1, 0) # 115200, 8bit, stopbit 1, parity none
loop do
  timestamp = Time.now.xmlschema # iso8601 型式で現在時刻を取得

  line = serialport.gets # read
  values = parse(line)

  next if values['tm'].nil? && values['hu'].nil? && values['at'].nil?

  # 温度
  unless values['tm'].nil?
    tm = BigDecimal(values['tm']) * 0.01
    put_metric_data('Temperature', timestamp, tm.floor(2).to_f)
  end

  # 湿度
  unless values['hu'].nil?
    hu = BigDecimal(values['hu']) * 0.01
    put_metric_data('Humidity', timestamp, hu.floor(2).to_f)
  end

  # 気圧
  unless values['at'].nil?
    at = values['at']
    put_metric_data('Atmospheric Pressure', timestamp, at)
  end

  break

end

このコードでは、名前空間(ネームスペース)に aiba、ディメンション DeviceId に BME280、メトリクス名は温度が Temperature、湿度が Humidity、気圧が Atmospheric Pressure として登録しています。

このコードから Amazon CloudWatch に送られているデータをグラフにしてみましょう。

まず AWS のマネジメントコンソールに入り、Amazon CloudWatch のページを表示します。
https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home

左のメニューにある「メトリクス」から登録したデータにアクセスできます。

カスタム名前空間の欄に送信時に指定した名前空間(ネームスペース)である aiba が表示されているのが分かるかと思います。

この名前空間の中に入っていくと、ディメンション DeviceId が BME280 のメトリクス Temperature、 Humidity、 Atmospheric Pressure が表示されているはずです。
(この例では同時にテストで送信した別のメトリクスも表示されています)

グラフに表示したいメトリクスにチェックを入れると、グラフが表示されます。

表示する期間や軸の範囲の設定も変更できるので、時々計測した値をグラフに表示して確認する程度であればこのメトリクスの表示だけで十分使えます。

しかし、グラフを見る頻度が高い場合や、いくつものグラフを並べて比較したい場合はダッシュボードを作成しておくと便利です。

次はこのダッシュボードの作成方法について説明します。

ダッシュボードの作成

よく見るグラフや、比較して見たいグラフがある場合はダッシュボードを作成しておくと便利です。

左のメニューにある「ダッシュボード」から「ダッシュボードの作成」に進みます。

名前を指定してダッシュボードを作成すると、次はウィジェットの追加です。

折れ線グラフを指定して、カスタムメトリクスのグラフを追加してみます。

先ほどと同様のグラフが表示されました。

ここで好みの設定を指定して追加するとダッシュボードにカスタムメトリクスのグラフが追加されます。

このように作成したグラフが先ほど紹介したこちらのダッシュボードになります。

まとめ

今回は Amazon CloudWatch に登録したデータの可視化についてまとめてみました。

このように Amazon CloudWatch のカスタムメトリクスを使うことにより、どのようなデータでも簡単に見ることができることができます。

IoTデバイスからのデータを収集と可視化が必要な場合はぜひ使ってみていただければと思います。

いいなと思ったら応援しよう!