SEILとスマートコンセント

本日リリースされたSEIL/x86 Ver2.31で、富士通コンポーネント株式会社から発売されているスマートコンセント「FX5204PS」への対応を行いました。

記事一覧

このデバイスは、前回の記事 「SEILと軽量Ruby」 にて軽くご紹介したものです。本稿では、一足先にこのスマートコンセント対応についてご紹介します。(SEIL with Rubyについては今後の展開にご期待ください。)

SEILのデバイス対応事情

SEIL/Xシリーズ、SEIL/B1にはUSB ポートがついています。またVMwareやHyper-Vなど、仮想環境で動作するSEIL/x86では、ホストマシンに付随しているUSB ポートが利用可能です。SEILにおいてこのUSBポートは、モバイルデータ通信端末やUSB フラッシュストレージの為に利用されます。(*1)

通常のファームウェアでは、これらの限られた種類のUSB デバイスしかサポートしておりません。しかしながら、せっかくのUSBポートです。開発チームでは、実験的に他のUSB デバイスを使えるようにする、といったことも行っています。

「ネットワーク箱であるSEILと、なにがしかのデバイスを組み合わせておもしろいことができないか?」 今回紹介するスマートコンセント FX5204PSはそんなモチベーションから実験的に対応を行ったデバイスの一つです。

スマートコンセント FX5204PS

スマートコンセントは「電力消費の見える化」を実現するデバイスです。今回扱うFX5204PSではタップのコンセント口ごとに個別に電力消費を計測することができ、この情報をUSB経由でPCから参照することができます。FX5204PSで扱える情報は以下の通りです。

製品のプレスリリースはこちら:小形電力センサー内蔵スマートコンセント新発売

(3/23追記)FX5204PSがぷらっとホーム様から購入できます:コンセント単位で消費電力を計測できる「スマートコンセント FX-5204PS」

SEILでのスマートコンセント対応

ここからはSEILでのFX5204PS対応についてお話しします。

ドライバのポーティング

SEILでFX5204PSを利用可能にするためにはまずドライバが必要です。FX5204PSにはWindows用のドライバ/アプリケーションが付属しています。しかし、SEILはNetBSDベースであるためこれをそのまま利用できません。幸いなことにOpenBSDにはFX5204PS用のコードがusps(4)ドライバ(*2)として取り込まれていますので、今回はこれをSEILに移植することにしました。

移植にあたっては大まかに以下の作業が必要です。

  1. OpenBSD → NetBSDへのドライバフレームワークの移し替え
  2. センサフレームワークの移し替え

OpenBSD とNetBSDは、ドライバフレームワークにおける共通部分が多く存在します。このため非常に少量の変更で移植を完了できました。

今回ベースとして使ったOpenBSDのソースコードでは、FX5204PSはセンサデバイスとして扱われています。SEILにおいても同様にセンサとして扱いますが、センサフレームワークが若干異なるため移し替えを行いました。これはOpenBSD では sensor_attach(9)、NetBSDではsysmon_envsys(9)と、それぞれ微妙に異なるAPIを提供しているためです。(*3)

センサフレームワークが違えば、ユーザからの情報取得の方法も異なってきます。OpenBSDではsysctl等で可能であるのに対して、NetBSDではenvstat(8)コマンドを用いてこれを行います。このコマンドを用いると、以下のようにスマートコンセントの情報を参照することができます。

% envstat
 Port0 Port1 Port2 Port3 Total Voltage Frequency Temperature
 W W W W W VAC Hz degC
 0.00 11.00 7.00 8.00 26.00 110.00 50.00 35.97

センサ用コマンド

SEILでは独自のユーザインタフェース(シェル)を提供しているため、先に挙げたenvstat(8)コマンドを直接呼び出すことができません。そこで今回はセンサ全般を扱う為のコマンドとしてshow status sensorコマンドを実装しました。こうして、以下のようにFX5204PSの情報が参照できるようになりました。

# show status sensor 
Sensor Devices 2012/03/04 05:06:07 JST 
 FX5204PS #0
 Port0: 0.000 W
 Port1: 12.000 W
 Port2: 7.000 W
 Port3: 8.000 W
 Total: 27.000 W
 Voltage: 111.000 VAC
 Frequency: 50.006 Hz
 Temperature: 35.960 degC

終わりに

本稿ではSEILにおけるスマートコンセント対応について解説しました。紹介した機能は、SEIL/x86 Ver2.31にて試験的に提供しております。手元にこのデバイスをお持ちの方は、是非お試しください。

また、スマートコンセント以外にも面白そうなデバイスについては今後も追加を行っていきたいと考えています。ご意見、ご感想がございましたら、是非twitterFaceboookページでも結構ですのでお気軽にご連絡ください。

*1 : サポートするUSBデバイス (X86)

*2 : usps(4)uspsドライバのコード

*3 : NetBSD5以降のenvsys_sysmon(9)では比較的差違が少ないですが、NetBSD3ベースであるSEILでは古いAPIが提供されています。