はじめに
先日、kintoneを使って室温を収集するサンプルを公開したところ、いろいろな反響があったので、もう少し実用的なものを公開してみるのもいいなと思ったところです。
いろいろ考えたところ、事務所で使用されている電流値の変化を計測することができるとおもしろいので、以下にその手順を示します。
材料
- Raspberry PI 3 model B
- クランプ式センサ・変換器一体型電流変換器 CTT-10-CLS-CV50
- ユニバーサルライン PUX IIIおよびAD1AD-V
- kintone
電流変換器について
電流値の測定は一般的に回路の中に電流計を接続しなくてはならず、停電をともなう工事が必要です。
しかし、電流変換器(CT)を利用することでこれらの工事をしなくても電流を計測できるようになります。
計測方法の特性上、回路の構成や接続には十分な注意が必要ですが、本記事で紹介したものは安全回路がついていることから一般的なものより安心して利用できます。
ユニバーサルラインについて
多重伝送を利用したシステムで、2芯のケーブルをもちいてデータを転送することができ、計測モジュールを並列に接続するだけで測定データを追加できる装置です。
詳しくは以下のリンク先でご確認下さい。
回路図
かなり雑ですが、こんな感じになっています。
ハードウェア設定
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 |
測定値読取スクリプト
# !/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
上記のライブラリを用いてコードを記述します。
# !/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時間毎の平均電流をグラフで表示するとこんな感じでした。
複合機や電気ポット使うと電流値が上がるのが見えて楽しいです(^-^)