本日リリースされたSEIL/x86 Ver2.31で、富士通コンポーネント株式会社から発売されているスマートコンセント「FX5204PS」への対応を行いました。
SEIL/Xシリーズ、SEIL/B1にはUSB ポートがついています。またVMwareやHyper-Vなど、仮想環境で動作するSEIL/x86では、ホストマシンに付随しているUSB ポートが利用可能です。SEILにおいてこのUSBポートは、モバイルデータ通信端末やUSB フラッシュストレージの為に利用されます。(*1)
通常のファームウェアでは、これらの限られた種類のUSB デバイスしかサポートしておりません。しかしながら、せっかくのUSBポートです。開発チームでは、実験的に他のUSB デバイスを使えるようにする、といったことも行っています。
「ネットワーク箱であるSEILと、なにがしかのデバイスを組み合わせておもしろいことができないか?」 今回紹介するスマートコンセント FX5204PSはそんなモチベーションから実験的に対応を行ったデバイスの一つです。
スマートコンセントは「電力消費の見える化」を実現するデバイスです。今回扱うFX5204PSではタップのコンセント口ごとに個別に電力消費を計測することができ、この情報をUSB経由でPCから参照することができます。FX5204PSで扱える情報は以下の通りです。
製品のプレスリリースはこちら:小形電力センサー内蔵スマートコンセント新発売
(3/23追記)FX5204PSがぷらっとホーム様から購入できます:コンセント単位で消費電力を計測できる「スマートコンセント FX-5204PS」
ここからはSEILでのFX5204PS対応についてお話しします。
ドライバのポーティング
SEILでFX5204PSを利用可能にするためにはまずドライバが必要です。FX5204PSにはWindows用のドライバ/アプリケーションが付属しています。しかし、SEILはNetBSDベースであるためこれをそのまま利用できません。幸いなことにOpenBSDにはFX5204PS用のコードがusps(4)ドライバ(*2)として取り込まれていますので、今回はこれをSEILに移植することにしました。
移植にあたっては大まかに以下の作業が必要です。
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にて試験的に提供しております。手元にこのデバイスをお持ちの方は、是非お試しください。
また、スマートコンセント以外にも面白そうなデバイスについては今後も追加を行っていきたいと考えています。ご意見、ご感想がございましたら、是非twitterやFaceboookページでも結構ですのでお気軽にご連絡ください。
*1 : サポートするUSBデバイス (X86)
*2 : usps(4)、uspsドライバのコード
*3 : NetBSD5以降のenvsys_sysmon(9)では比較的差違が少ないですが、NetBSD3ベースであるSEILでは古いAPIが提供されています。