Edited at

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


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分おきで回しておきます。


データ



室温データがこんな感じで保存、確認できます。(21時まではデータに欠落があります)

22:30に暖房をオフにしたのがよくわかりますねw。


監視

監視設定で、保存した値が設定値を上回る、下回るなどした時にメールで通知することができます。

メール以外は今の所実装されていないので、メールをトリガーにして他のサービスや製品と連動を実装すれば色々使い道がありそうです。


まとめ

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