2012年11月28日水曜日

Linuxで温度計測してMRTGへ表示させる


USB温度計ってのがAmazonで売ってたので、これを使って室温を計測する。
ただ計測できるだけならつまんないので、MRTG使って温度もグラフ化してみる。

対象はCentOS 6(VM)です。

USB温度計のセットアップ


まずUSB温度計をPCに繋ぐ。
ただ、普通につないでもVMware上の仮想マシンは認識してくれない(かも)ので、設定でUSBを認識させます。(今回の設定はVMware5を利用してます。)
[仮想マシン設定]を開いて、デバイスの[USBコントロール]を選択して、設定画面で[すべてのUSB入力デバイス]がチェック入りにする。
これで、ツールバーにUSBデバイスがアイコンで表示されます。今回買ったUSB温度計を繋いだら、「Microdia TEMPer1V1.2」が表示されてます。

CentOS側でも確認してみると、次のように表示されてました。
# dmesg | grep TEMP
input: RDing TEMPer1V1.2 as /class/input/input4
input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:02:00.0-2.1
hiddev96,hidraw96: USB HID v1.10 Device [RDing TEMPer1V1.2] on usb-0000:02:00.0-2.1
認識されたら、必要なパッケージをインストールします。
# yum -y install libusb-devel  git
gitは温度測定コマンドのソースコードが、githubで公開されているのを利用するために使います。
パッケージのインストールが終わったら、ソースコードのチェックアウトをします。
# git clone git://github.com/bitplane/temper.git
これで現在のディレクトリにtemperディレクトリがチェックアウトされます。
次にソースコードをカスタマイズします。
# vi ./temper/temper.c

以下のように編集。
44行目の utc = gmtime(&t); を utc = localtime(&t); に
47行目の strftime(dt, 80, “%d-%b-%Y %H:%M”, utc); を strftime(dt, 80, “%Y-%m-%d %H:%M:%S”, utc); に

/ *
 * Standalone temperature logger
 *
 */
#include <stdio .h="">
#include <time .h="">
#include "pcsensor.h"
/* Calibration adjustments */
/* See http://www.pitt-pladdy.com/blog/_20110824-191017_0100_TEMPer_under_Linux_perl_with_Cacti/ */
static float scale = 1.0287;
static float offset = -0.85;
int main(){
  int passes = 0;
  float tempc = 0.0000;
  do {
    usb_dev_handle* lvr_winusb = pcsensor_open();
    if (!lvr_winusb) {
      /* Open fails sometime, sleep and try again */
      sleep(3);
    } else {
      tempc = pcsensor_get_temperature(lvr_winusb);
      pcsensor_close(lvr_winusb);
    }
    ++passes;
  }
  /* Read fails silently with a 0.0 return, so repeat until not zero
   or until we have read the same zero value 3 times (just in case
   temp is really dead on zero */
  while ((tempc &gt; -0.0001 &amp;&amp; tempc &lt; 0.0001) || passes &gt;= 4);
    if (!((tempc &gt; -0.0001 &amp;&amp; tempc &lt; 0.0001) || passes &gt;= 4)) {
      /* Apply calibrations */
      tempc = (tempc * scale) + offset;
      struct tm *utc;
      time_t t;
      t = time(NULL);
      /*utc = gmtime(&amp;t); */
      utc = localtime(&amp;t);
      char dt[80];
      /* strftime(dt, 80, "%d-%b-%Y %H:%M", utc); */
      strftime(dt, 80, "%Y-%m-%d %H:%M:%S", utc);
      printf("%s,%f\n", dt, tempc);
      fflush(stdout);
      return 0;
    } else {
      return 1;
    }
  }
}


あとはmakeしたら、コマンドができます。
# cd ./temper
# make

温度計の動作確認

上で作ったコマンドの動作確認です。
makeしたディレクトリにコマンドが生成されているので、実行するとこんな感じになります。
# ./temper
2012-10-15 22:01:48,27.825012
このコマンドを使って、MRTGへのグラフ出力までやってみます。
長くなってしまったので、次の記事にまとめます。

参考:http://www.infiniteloop.co.jp/blog/2012/10/linuxthermometer/

2012年11月5日月曜日

自動的にiTunesの全曲に歌詞を入れる




ここで紹介されてましたが、LyricsMasterというアプリを利用して、iTunesに登録された曲に歌詞をつけてみる。
最初は歌詞なんていらないよ、なんて思ってましたが、歌詞を付けても邪魔にはならないし、意外とあると嬉しいです。

普通にアプリを使うだけなら多分問題ないので、ここでは自分が使った全自動で登録する方法をまとめておく。これで、iTunesで管理されている(ほぼ)全曲に対して(ほぼ)自動的に歌詞を付けれました。

  1. インストールしたアプリを起動、ついでのiTunesも起動する。
  2. 「Lyrics Master」ダイアログで、検索ボタンをクリックし、「歌詞検索」ダイアログを出す。
  3. 「歌詞検索」ダイアログで、「自動検索」と「連続モード」を有効にする。
  4. メニューバーから環境設定を開く。
  5. 「iTunes」タブを開き、「ダウンロード時に自動で適用」を有効に、「設定前に確認画面を表示」を無効にする。
  6. iTunesで、設定したい曲を選択(再生)する。
    ここでは設定するために再生しているので、音を出す必要はないです。
    再生順に歌詞を設定するため、「ランダム再生」や「1曲だけループ再生」は無効にした方が良いです。
  7. 「Lyrics Master」ダイアログで「iTunes連携」ボタンをクリック。検索が始まらない場合は、検索ボタンをクリック。

候補が1つだけ見つかれば、あとは自動で挿入され、次の曲以降も自動検索→歌詞の設定までしてくれます。

候補が複数見つかる場合は、自分で曲をクリックして歌詞の設定をしてあげて下さい。