FreeBSDで気温センサー

ラズベリーパイで、家電制御させたいので、

http://www.orsx.net/blog/archives/4938
Raspberry Piを使ってスマホ・音声で家電を制御するシステムを作ってみた

さんのサイトを激しく参照していると、気温を測定するUSB Daq的なものがあるとのこと。
TEMPerとかいうやつである。(購入してみると、若干パッケージが胡散臭い。中国語だし。)

引用

TEMPer V23.5制御用コマンドのインストール

$ git clone https://github.com/bitplane/temper.git
$ cd temper/
$ vi 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);
$ make
$ sudo make install

温度を取得する場合は次のように実行します。

$ sudo temper

引用終わり

そうすると、ラズベリーパイで、何のこともなく実行できた。
ところが、我が家の場合は、家にHP Microserverなサーバがある。
だったら、それに温度測定器をつければいいんじゃないかと思い、
さっそく自宅サーバに取り付けてやってみた。

# rm -rf ./bto_ir_cmd/
# ls
# git clone https://github.com/bitplane/temper.git
Cloning into 'temper'...
remote: Counting objects: 73, done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 73 (delta 27), reused 73 (delta 27)
Unpacking objects: 100% (73/73), done.
Checking connectivity... done
# cd temper/
# vim temper.c

ってな感じで先のサイトで言われている通り、temper.cの44行目と、47行目をいじる。
そしてmake

# make
gcc -Wall temper.c pcsensor.c -o temper -lusb
temper.c: In function 'main':
temper.c:23: warning: implicit declaration of function 'sleep'
pcsensor.c: In function 'usb_detach':
pcsensor.c:73: error: 'ENODATA' undeclared (first use in this function)
pcsensor.c:73: error: (Each undeclared identifier is reported only once
pcsensor.c:73: error: for each function it appears in.)
*** [temper] Error code 1
Stop in /root/temper/temper.

ややめげそうになるが(別にラズベリーパイからでいいし。というのが大きい)、
大したエラーではなさそうだ。
ENODATAが宣言されていないが、適当にぐぐれば、これは61と定義されているそうなので、
61に変更するとよい。

pcsensor.c 73行目

if(errno == 61/*ENODATA*/) {
                        if(debug) {
                                printf("Device already detached\n");
                        }

ENODATAをコメントアウトし、61を入れておく。
その後、再度makeすると、プロトタイプ宣言がないよと、注意されるが無事にmakeに成功する。

# make
gcc -Wall temper.c pcsensor.c -o temper -lusb
temper.c: In function 'main':
temper.c:23: warning: implicit declaration of function 'sleep'

最後に、make install cleanしておけば、実行できる。

# make install clean
install temper /usr/local/bin
rm temper
# temper
2014-12-21 19:53:41,28.853712

Windows版はCDがついてきて、グラフとか表示できたりするらしいけれども、試してないからわからんです。
あと、私はスーパーユーザーでやってしまいましたが、別にmake install以外は、一般ユーザーで問題ないと思います。
まぁ、1500円程度にしては楽しめる。