はちゅにっき

こっちのブログはまったり更新

Perl でハードディスクの温度を定期的に Twitter にポストする

ちょっと Twitter での aoshiman さんの発言 が気になったので、Blog を見てみることに。

自宅サーバは極端に熱のこもる場所に設置してあるわけではないので、廃熱に関してはそこそこ大丈夫だと思っているのだけど、それでもハードディスクとかの温度は心配。
http://aoshiman.net/weblog/2009/09/04/python_hdtemp/

あるある。
というわけで、実行してみよぅ。

% python hdd_info.py
zsh: command not found: python

あるある。
さ、Perl で書こう。

の前に、まさかとは思うけれど、とりあえず CPAN で調べてみよう。

Linux-hddtemp
http://search.cpan.org/~yorhel/Linux-hddtemp-0.01/lib/Linux/hddtemp.pm

またまた。ご冗談を。

  • local::lib をつかってインストールするよ
$ mkdir -p hddtemp/lib  # <-- local::lib 用のディレクトリ
$ cd hddtemp
$ perl -Mlocal::lib=lib -MCPAN -e shell
cpan[1]> install Linux::hddtemp

ためしてみよう。

$ perl -Mlocal::lib=lib -MData::Dumper -MLinux::hddtemp -e 'print Dumper(Linux::hddtemp->new->get)'
$VAR1 = {
          '/dev/sdd' => {
                          'unit' => 'C',
                          'temp' => '34',
                          'name' => 'Hitachi HTS543216L9A300'
                        },
... ずらずらと

えっ。なにこれこわい。

ちなみに、Linux::hddtemp は IO::Socket からデータを取得しているみたい。
つまり hddtemp をデーモンモードで起動している必要があるみたいです。
debian では以下のコマンドを実行すると、デーモンモードで起動するかどうかを選択する画面が出るので、YES を選ぶことでデーモンモードで起動します。

% dpkg-reconfigure hddtemp

あとは、Twitter への POST は Net::Twitter を使えば OK なので。。。

#!/usr/bin/env perl

use warnings;
use strict;
use utf8;

use FindBin;
use local::lib "$FindBin::Bin/lib";
use Linux::hddtemp;
use Net::Twitter;
use DateTimeX::Lite qw/ Strftime /;

our $USER = 'botname';
our $PASS = 'botpass';

my @status;
my $now  = DateTimeX::Lite->now( time_zone => 'local' )->strftime("%H:%M %p");
my $temp = Linux::hddtemp->new->get;

foreach my $dev ( sort keys %{$temp} ) {
    push @status, sprintf("[%s] => %s℃", $dev, $temp->{$dev}{temp});
}

my $twitter = Net::Twitter->new( username => $USER, password => $PASS );
$twitter->update( sprintf("%s at %s", join(' : ', @status), $now) );


あれ、なんだかあっさり?
これで、こんな内容で POST してくれるようになりました。

[/dev/sda] => 34℃ : [/dev/sdb] => 33℃ : [/dev/sdc] => 33℃ : [/dev/sdd] => 33℃ at 20:30 PM

とりあえず、わーい。
でも、なんとなくちょっと拡張してみたい気がするよね。。。?
なんか、温度の情報が1つの RSS Feed だと考えると Plagger を使って Twitter にPOST するとか、GMail に送信するとか。。。
SQLite に保存してグラフにしてみるとか。。。