おんどとりのデータを Ganglia に登録する

おんどとりという温度計測デバイスがある。サーバ監視に使っている Ganglia に測定値を送って、プロットするようにした。なお本機には、測定値をクラウドに送信したり、メールで送信したり、FTP サーバにアップする機能もある。しかし、Ganglia に登録するなら、直接データを取り出したほうが簡単であろう。

TR-7W の場合

B/crrntdata/cdata.txt に

#1
MachineCode=1
Name=----
Time=2015/12/30 18:43'10
Unit=0
cTemperature1=25.3
cTemperature2=26.2
wState=0

のような生データがあるので、これをパースして gmetric に投げればよい。

curl http://hostname/B/crrntdata/cdata.txt | awk -F= '$1=="cTemperature1" {system("gmetric -t float -n OndotoriCH1 -u Celcius -v " $2/1.0)} $1=="cTemperature2" {system("gmetric -t float -n OndotoriCH2 -u Celcius -v " $2/1.0)} '

TR-701NW の場合

Web インターフェイスが凝っている代わりに、データの取得を Ajax でやるようになっていて解読が複雑である。current.inc というファイルに、構造体をダンプして base64 エンコードしたものが JSON で入っているので、Python で適当にパースする。どうせ要素の順番は変わらないので、添字などは決め打ちで十分だ。なお、以下のコードは摂氏温度の設定の場合である。

#!/usr/bin/python

import urllib2
import base64
import struct
import os

response = urllib2.urlopen("http://hostname/current.inc").read().split()
data = base64.b64decode(response[6][1:-2])

ch1 = (struct.unpack("H", data[26:28])[0] - 1000) / 10.0
ch2 = (struct.unpack("H", data[42:44])[0] - 1000) / 10.0

os.system("gmetric -t float -n Ondotori-CH1 -u Celcius -v %.1f" % ch1) 
os.system("gmetric -t float -n Ondotori-CH2 -u Celcius -v %.1f" % ch2)

これらのスクリプトを cron から適当な間隔で呼べばよい。