search
LoginSignup
4

More than 3 years have passed since last update.

posted at

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

データ

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

監視

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

まとめ

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4