はじめまして
UPSを使っているのですが、
API等でバッテリーの状態を確認したいです。
そこで「getsystempowerstatus」を使用したところ、
以下の3つの項目が不明になります。
BatteryLifePercent;
バッテリ残量を0~100のパーセントで示します
不明な場合は255を示します
BatteryLifeTime;
今充電しているバッテリで稼働できる時間を秒で示します
不明な場合は-1を示します
BatteryFullLifeTime;
フル充電しているバッテリで稼働できる時間を秒で示します
不明な場合は-1を示します
この場合、この関数では取得不可能なのでしょうか?
また、それ以外に取得する方法があるのでしょうか?
そもそも、そのUPSにそれらの機能があるのですか?
それらの項目は実際のハードウェアから情報が提供される必要があると思いますが、
そのUPSにその情報が存在しない場合、APIに関数が存在していてもそれらの項目を
返しようがないので、不明とせざるを得ないでしょう。
GetSystemPowerStatus()の対象は「そのコンピュータ」だけの
ようです(内臓電源のみ)。
外部装置であるUPSは対象外ではないでしょうか。
また、バッテリーを内蔵していないデスクトップPCなどでは
それに関する情報は取得できないと予想できます。
maruさん、仲澤@失業者さん
お返事有難うございます。
>そもそも、そのUPSにそれらの機能があるのですか?
はい、シェアウェアとして存在しているようです。
但し、価格が高いためそのソフトを使いたくないため、
APIでどうにか確認できないかと考えているのですが、
PC側は外部電源の機構まで管理していないということでしょうか。。。
例えば、停電が発生しACへの電源供給がオフになった場合も、
GetSystemPowerStatusメソッドの取得値は変わらなかったのですが、
英語のサイト等を検索していると、
何かしらのフラグを設定した場合、
取得出来たりしたような記述がかいており、
どうにかして出来ないかと検討しています。
何かお分かりになる情報がありましたら、
コメントして頂けると幸いです。
> はい、シェアウェアとして存在しているようです。
それはUPSメーカーのソフトではなく、サードパーティのものですか?
メーカーのソフトなら、何らかの非公開プロトコルでUPSと通信している可能性もありま
す。
また、シェアウェアでも高価なものとなると、メーカーとプロトコルの開示契約を結ん
で…といったことも想定されます。
いずれにせよ、あるソフトウェアで可能だからといって、だれにでも可能とは限らない
ということはあるかもしれません。
それはそれとして。
割と最近の過去ログに似たような話題があります。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+201002/10020012.txt
> PC側は外部電源の機構まで管理していないということでしょうか。。。
これについては知りませんが、少なくともそのUPSのデバイスドライバが必要な気が
します(コントロールパネルの電源オプションの UPSタブを見るとUPSの推定稼働時
間等が表示されるようになっているので)。
そして、そのデバイスドライバが「要求する機能」を提供していない限りは
要求する情報は得られないでしょう。
あとはUPSメーカの情報を探してみたらどうでしょうか。
aetos さん、maruさん
お返事有難うございます。
>それはUPSメーカーのソフトではなく、サードパーティのものですか?
>メーカーのソフトなら、何らかの非公開プロトコルでUPSと通信している可能性もあり
ま
す。
いいえ、メーカーのソフトです。
TPC/IPプロトコル通信にて行っていました。
あまりハードウェア側の仕組みを理解していないのですが、
バッテリーの残量についてはOS側で管理外ならば、
メーカーの規約にのっとるしかなさそうですね。。。
>コントロールパネルの電源オプションの UPSタブを見るとUPSの推定稼働時
>間等が表示されるようになっているので)。
UPSの稼働時間については表示が無効になっていました。(電源のみ表示されていま
す。)
getsystempowerstatusを参照しているのではと思います。(同様の結果なので)
やはり、メーカー側からのドライバや通信インターフェイスが分からないと、
取得できないという事になるのでしょうか。
> バッテリーの残量についてはOS側で管理外ならば、
> メーカーの規約にのっとるしかなさそうですね。。。
OS側の規約に沿ったドライバー等を使用すれば、OSの標準のドライバーを
使わなくてもいいのだと思います。
使用したい関数が、OSの標準のドライバーを使うことが前提となっているならば、
使えない可能性も大きいですね。
> やはり、メーカー側からのドライバや通信インターフェイスが分からないと、
> 取得できないという事になるのでしょうか。
外部から操作されないようにメーカー側で隠している場合もありますね。
勝手に操作して、「おかしくなりました。」なんてクレーム言われても
メーカー側も困るのかと思います。