Chumby で外部の動作をカウントアップできます。それもワイヤレスでワイヤレスで。
センサーには、ワイヤレスマウス(USBドングル)を使います。また、普通に使えば、内蔵電池だけで1年以上動作するでしょう。
例えば、こんな利用方法も面白いでしょうね。
o マウスから左側スイッチを取り出して、スイッチの可動部を利用してドアの開閉回数をカウント。
o スイッチ部にフォトセンサーを追加して、明暗数のカウント。
o スイッチ部に交流電流センサーを接続して、コーヒーメーカーの稼働数(飲んだコーヒー)のカウント。
( ChumbyでUSBマウスのクリックを可視化する
~ PHP + BusyBoxシェルで作る「Mouse Counter」システム ~
Chumbyや組み込みLinux機のような軽量環境で、「USBマウスの左クリック回数をカウントしたい」
そんなニッチだけど妙に楽しい要求を、PHPとシェルだけで実現してみました。
GUIも不要、Xも不要不要です。/dev/input を直接読んでクリックを検出し、Webブラウザでリアルタイムに数値を表示します。
(1) 全体構成
このシステムは2つの部品で構成されています。
o USBマウスのクリック検出 USB_mouse_Lswich.sh
o Web表示&制御 mouse.php
関係はこうなります。
------------------------------------------------------------
USBマウス
↓
/dev/input/event*
↓
USB_mouse_Lswich.sh → CLICK行を出力
↓
mouse.php が行数を数えて /tmp/click_count.log に保存
↓
ブラウザに表示
(2) クリック検出の仕組み(シェル側)
USB_mouse_Lswich.sh の中身は実にハードコアです。
dd if="$DEV" bs=16 count=1 | hexdump | grep "01001001 01000000"
これは /dev/input/event* から
Linuxの生の入力イベント(EV_KEY + BTN_LEFT) を直接読んでいます。
01001001 01000000 は
「左ボタンが押された」
というイベントコードです。
つまりこれはXもlibinputも通さない、生のUSB HID監視です。
ChumbyやBusyBox環境に最適です。
(3) カウントをファイルで管理
PHP側では、このシェルの出力をこうやって処理しています:
(sh USB_mouse_Lswich.sh) | (
c=現在の値
while read line; do
c=$((c+1))
echo $c > /tmp/click_count.log
done
)
ポイントは、「ログを追記しないで、常に上書き」です。
これにより、ログファイルが巨大化しない、PHPから一発で現在値が読める、再起動しても値を保持できる(要改造)という、組み込み機器に理想的な設計になります。
(4) 2つの動作モード
このシステムには「哲学的に重要な」2つのモードがあります。
Clear Mode:START時にカウンタを0に戻す
Keep Mode:前回の値を引き継ぐ
この状態は /tmp/mouse_mode.conf に保存されるため、Web画面をリロードしても、モードが維持されます。
(6) Webインターフェース(すべてWebブラウザだけで操作できます)
Chumby向けに 320px 幅・黒背景・等幅フォントで設計。
o 現在のクリック数を巨大表示
o スクリプトの実行状態
o 実行ユーザー(START / STOP / RESET)
o モード切替
cron も systemd も不要。PHPがプロセス管理UIになっているのが最大の特徴です。