5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

オフィスや自宅を快適にするIoT byゆめみ③Advent Calendar 2018

Day 18

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

Last updated at Posted at 2018-12-17

#Machinist
IIJから、[Machinist] (https://machinist.iij.jp/)というサービスが発表されました。数値データ(メトリクス)を記録し、グラフ化、監視、比較できるサービスです。
現在ベータ版で、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で室温の記録、監視を設定してみました。

5
4
0

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
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?