読者です 読者をやめる 読者になる 読者になる

ブログ

クソブログ

正月によく落ちるXively

IoT Sensor Raspberry Pi

また落ちてますね。

f:id:XX-Prime:20160106212338p:plain

M2Xは健在

お隣の某民主主義人民共和国が水爆実験をやったとやらで大気中の放射性物質が気になる所ですが、私はXivelyとM2Xの両方に放射線センサの(同一)データを上げているのでM2Xでは確認することができました。

f:id:XX-Prime:20160106212923p:plain

UTCなので+9時間して見る必要がありますが、一日分見ても特に異常な変動は無いので安心して良いと思います。政治的には大変ですが。

Xivelyにだけデータを上げている方は複数クラウドの同時利用をお勧めします。

参考のために、raspberry piからXivelyとM2Xの両方に放射線データを上げるrubyスクリプトを以下に記します。
xively-m2x.rb

#!/usr/bin/ruby

require 'xively-rb'
require "time"
require "m2x"

APIKEY = "YOUR_XIVELY_API_KEY"
FEEDID = "YOUR_XIVELY_FEEDID"

M2X_API_KEY="YOUR_M2X_API_KEY"
M2X_DEVICE="YOUR_M2X_DEVICE"

FIFO_PATH = '/var/lib/rasdiation/rasdiation.fifo'

def put_data(client, feedid, channel, value)
  datapoint = Xively::Datapoint.new(:at => Time.now, :value => "#{value}")
  client.post("/v2/feeds/#{feedid}/datastreams/#{channel}/datapoints", :body => {:datapoints => [datapoint]}.to_json)
end

radiation = nil
radiation_error = nil
radiation_cpm = nil

# Read from rasdiation fifo
# UnixTime,1420256802,CPM,2.350000,uSv/h,0.044313,uSv/h_Error,0.006464 etc.
File.open FIFO_PATH do |file|
  l = file.read
  arr = l.split(",")
  radiation_cpm = arr[3].to_f
  radiation = arr[5].to_f
  radiation_error = arr[7].to_f
end

# try uploading to Xively
begin
  c = Xively::Client.new(APIKEY)
  p c
  unless radiation.nil? && radiation_error.nil?
    res1 = put_data(c, FEEDID, "z_radiation_cpm", radiation_cpm)
    res2 = put_data(c, FEEDID, "z_radiation", radiation)
    res3 = put_data(c, FEEDID, "z_radiation_error", radiation_error)
    # for debug
    #p res1
    #p res2
    #p res3
  end
rescue => ex
  p "Xively Error"
  p ex
end

# try uploading to m2x
begin
  m2x = M2X::Client.new(M2X_API_KEY)

  device = m2x.device(M2X_DEVICE)
  device.create_stream("radiation_uSv_per_hour")
  #device.create_stream("radiation_CPM")
  device.create_stream("radiation_Error_uSv_per_hour")

  now = Time.now.iso8601

  values = {
    radiation_uSv_per_hour: [ { value: radiation, timestamp: now } ],
    #radiation_CPM: [ { value: radiation_cpm, timestamp: now } ],
    radiation_Error_uSv_per_hour: [ { value: radiation_error, timestamp: now } ]
  }

  res = device.post_updates(values: values)
rescue => ex
  p "M2X Error"
  p ex
end

放射線センサの接続と使用は以下を参考にしてください。
xx-prime.hatenablog.com

まとめ

政治がらみの事をちょっと書こうなどと画策して恥ずかしくなって諦めた結果がこのありさまだよ。