上海問屋のDNSB-35137など、いくつかの販路で取り扱われているUSB接続の温度計 RDing TEMPerV1.2。
その温度をmuninで計測するためにpluginを作った。
![]() [送料\210〜] USB接続式 温度計 :パソコンで部屋の温度を測定できる USB接続式 温度計 上海問… |
今回考慮が必要だった点
・USB温度計を2つつなぐ
・つなぐUSB BUSが同じであるため、CentOS5上で見分けがつかない
(TEMPerV1.2ではシリアルを含めデバイス内のパラメータが全部一緒で見分ける方法がない)
・2つの温度計の設置位置は違うので、温度差が5度ぐらいある
・pcsensorコマンド実行時、デバイスがオフラインになることが良くある
(参考→USB温度計 TEMPerV1.2は計測ミスが多い)
あまり複雑なことをするのも嫌だったので、単純な実装としました。
・温度が2つ取得できるまで、再試行する
・温度が低い方から順にソートして「usbtemper0」「usbtemper1」としていく
また、内部で使うコマンドは、うちで作成した「pcsensor-1.0.2 for TEMPerV1.2 with multi device support」を使います。
USB温度計を1個しか繋がない人は「my $maxdevice=1;」に書き換えてください。
#!/usr/bin/perl -w my $options="-d"; my $maxdevice=2; my $arg=$ARGV[0]; if(!$arg){ $arg=""; } if("$arg" eq "config"){ print "graph_title USB Temperature Sensor\n"; print "graph_vtitle Celsius\n"; print "graph_category sensors\n"; print "graph_args --base 1000 -l 0\n"; } my @devlist; my $count=0; while($count<$maxdevice){ open(FILE,"/usr/local/bin/pcsensor $options|"); while(my $line=<FILE>){ $line =~ s/\n//ig; if($line =~ /Temperature/){ my @strs=split(/ /,$line); my $devnumber=$strs[3] ."-". $strs[5]; my $value=$strs[8]; $value=~ s/C//ig; #$value=int($value); $devlist[$count]=$value; $count++; } } close(FILE); } my $counttmp=0; foreach $value (sort @devlist){ if("$arg" eq "config"){ print "usbtemper".$counttmp.".label USB temper".$counttmp."\n"; }else{ print "usbtemper".$counttmp.".value ".$value."\n"; } $counttmp++; }
これ、仕掛けて3時間ぐらいしたら、kernel panic起こしやがった・・・