Help us understand the problem. What is going on with this article?

IIJ Machinistで室温をモニタリングする。

More than 1 year has passed since last update.

Machinist

IIJから、Machinistというサービスが発表されました。数値データ(メトリクス)を記録し、グラフ化、監視、比較できるサービスです。
現在ベータ版で、10メトリクス、保存期間は直近の1ヶ月までなら無料で利用できるので、Raspberry Piに繋いだ温度センサーで取得した室温を記録してみることにします。

データ保存

基本的にJSON形式のデータをhttps/putするだけ。チュートリアルに従ってjsonを書きます。

{
  "agent": "BME280",
  "metrics": [
    {
      "namespace": "bme280",
      "name": "temperature",
      "tags": {
        "location": "living"
      },
      "data_point": {
        "value": 22.37
      }
    }
  ]
}

温度計測

Raspberry pi3B にBME280基盤を、ブレッドボードなしでジャンパ線4本で接続。
BME280のRubyによるデータの読み出しは、ruby-i2c-devicesを使用。

qiita.rb
#!/usr/bin/env ruby

$LOAD_PATH << "/home/pi/BME280/ruby/i2c/lib"
require "/home/pi/BME280/ruby/i2c/lib/i2c"
require "/home/pi/BME280/ruby/i2c/lib/i2c/driver/i2c-dev"
require "/home/pi/BME280/ruby/i2c/lib/i2c/device/bme280"

@device = I2CDevice::Bme280.new(driver: I2CDevice::Driver::I2CDev.new("/dev/i2c-1"))
#p @device.read_id
#p @device
@device.write_config(I2CDevice::Bme280::T_STANDBY_0_5MS, I2CDevice::Bme280::FILTER_16)
@device.write_ctrl_hum(I2CDevice::Bme280::OVERSAMPLE_1)
@device.write_ctrl_meas(I2CDevice::Bme280::OVERSAMPLE_16, I2CDevice::Bme280::OVERSAMPLE_2, I2CDevice::Bme280::MODE_NORMAL)
#p @device.calc_sensor_data
temp = @device.calc_sensor_data[:temp]

ひとまずこれで室温を取得。

JSON組み立て

データをハッシュで整理してJSONに変換するのがとっつきやすそう。

require 'json'
metrics = [ {"namespace" => "bme280","name"=>"temperature","tags"=> {"location"=> "living"},"data_point"=>{"value"=> temp}}]
data = {"agent" => "BME280","metrics"=> metrics}

input = JSON.pretty_generate( data )

これで先のJSONが組み上がります。

https put

できたJSONをput

require 'net/http'
require 'openssl'
require 'uri'

url = URI.parse("https://gw.machinist.iij.jp/endpoint")
http = Net::HTTP.new(url.host,url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER

api_key = "your_api_key"
req = Net::HTTP::Post.new(url.request_uri)
req["Content-Type"] = "application/json"
req['Authorization'] = 'Bearer ' + access_token
#BearerのBが大文字でないと認証通りません。
req.body = input
res = http.request(req)

puts res.code, res.msg,res.body

これでデータをPUTできました。
cronに登録して2分おきで回しておきます。

データ

Machinist.png
室温データがこんな感じで保存、確認できます。(21時まではデータに欠落があります)
22:30に暖房をオフにしたのがよくわかりますねw。

監視

監視設定で、保存した値が設定値を上回る、下回るなどした時にメールで通知することができます。
メール以外は今の所実装されていないので、メールをトリガーにして他のサービスや製品と連動を実装すれば色々使い道がありそうです。

まとめ

IIJの新サービス Machinistで室温の記録、監視を設定してみました。

tatsushi
基本的に機械屋さんです。IT的なことは趣味
https://tatsushi.ml/blog/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away