Ruby
kintone
kintoneRestApi
ユニバーサルライン

kintoneを使ってIoTデバイスのデータを収集する(電流編)

はじめに

先日、kintoneを使って室温を収集するサンプルを公開したところ、いろいろな反響があったので、もう少し実用的なものを公開してみるのもいいなと思ったところです。

いろいろ考えたところ、事務所で使用されている電流値の変化を計測することができるとおもしろいので、以下にその手順を示します。

材料

電流変換器について

電流値の測定は一般的に回路の中に電流計を接続しなくてはならず、停電をともなう工事が必要です。
しかし、電流変換器(CT)を利用することでこれらの工事をしなくても電流を計測できるようになります。
計測方法の特性上、回路の構成や接続には十分な注意が必要ですが、本記事で紹介したものは安全回路がついていることから一般的なものより安心して利用できます。

ユニバーサルラインについて

多重伝送を利用したシステムで、2芯のケーブルをもちいてデータを転送することができ、計測モジュールを並列に接続するだけで測定データを追加できる装置です。
詳しくは以下のリンク先でご確認下さい。

豊中計装株式会社

回路図

かなり雑ですが、こんな感じになっています。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3131343234302f63613465363938372d353939622d356430612d343739652d6530316433353161353137392e6a706567.jpg

ハードウェア設定

AD1AD-V

AD1AD-Vのロータリースイッチを以下のとおり設定

項目 設定
CH 0
bit 8

PUX III

項目 設定
IPアドレス 192.168.1.100
サブネットマスク 255.255.255.0

Raspberry PI

項目 設定
IPアドレス 192.168.1.10
サブネットマスク 255.255.255.0

測定値読取スクリプト

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

require 'socket'

sock = TCPSocket.open('192.168.1.100','10001')

def get_cmd(msg)

  msg = "\r\n" + msg + "\r\n"
  val = 0

  msg.each_char do |s|
    #puts s
    val += s.ord
  end

  msg += ("%#x" % val).upcase[-2,2]

  return msg

end

msg = get_cmd("QM00008")

sock.write(msg)

sleep(1)

val = ""

msg = get_cmd("QB0")
sock.write(msg)

res = sock.gets
res = sock.gets
puts res

str = res[7,3]
val = str.reverse.hex.to_s(2)
val = 1.25 * val.to_i(2) / 1000.0

sock.close

puts val / 5.0 * 50.0

以下のコマンドにて、スクリプトを実行。

$ ruby get_current.rb

QM00008
C4
QB08080F00000000000000000000000100000000000000000000000000000000000
0.1875

電流が0.1875[A]流れていることがわかります。

kintoneの設定

前回の記事、kintoneを使ってIoTデバイスのデータを収集する(温度編)を参考に電流用のアプリを作成。

ただし、本記事では値のフィールドを「current」とします。

スクリプトの修正

Ruby用kintoneライブラリをインストールします。

$ gem install kintone

上記のライブラリを用いてコードを記述します。

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

require 'socket'
require 'kintone'

sock = TCPSocket.open('192.168.1.100','10001')

# make command
def get_cmd(msg)

  msg = "\r\n" + msg + "\r\n"
  val = 0

  msg.each_char do |s|
    #puts s
    val += s.ord
  end

  msg += ("%#x" % val).upcase[-2,2]

  return msg

end

msg = get_cmd("QM00008")

sock.write(msg)

sleep(1)

val = ""

msg = get_cmd("QB0")
sock.write(msg)

res = sock.gets
res = sock.gets
puts res

str = res[7,3]
val = str.reverse.hex.to_s(2)
val = 1.25 * val.to_i(2) / 1000.0

sock.close

puts val / 5.0 * 50.0

api = Kintone::Api.new("xxx.cybozu.com","xxxxxxxxxxxxxxxxxxx")
app = 2
record = {"current" => {"value" => (val * 10.0).to_s}}

puts api.record.register(app, record)

以下のコマンドを実行し、データが追加されれば成功。

$ ruby get_current.rb

自動起動

スクリプトに実行権限を付与し、cronに登録する。

$ chmod a+x get_current.rb
$ crontab -e

1分ごとにデータを送信するため、以下の行を追加。

*/1 * * * * /home/pi/get_current.rb

完成!

1時間毎の平均電流をグラフで表示するとこんな感じでした。

スクリーンショット 2018-01-13 20.26.20.png

複合機や電気ポット使うと電流値が上がるのが見えて楽しいです(^-^)