この記事はSLP KBIT Advent Calendar 2016 その2の5日目の記事になります。
ラボ畜の皆さんおはこんばんちは。
KENZENなみなさんおやすみなさい。
某大学の工学部では、21時を過ぎると一定時間ごとにエアコンが止められます。止まったのをつけに行くのはさほど苦ではないのですが、「なんか暑いな/寒いな、と思ったらエアコンが止まっていたことが発覚した」時の怒りといったら、今すぐに会計係に殴り込みに行きたくなりますよね。
本当は自動でつけるところまでやりたいのですが、機材の置き場所の確保やリモコンの操作性に関わるため、手始めにエアコンが切れたことをお知らせするアプリケーションを作りました。
リリース版とソースコードを公開しています。
動作要件:
- Windows XP/Vista/7/8.1/10(32ビット、64ビット)
- .net Framework 4以降(4/4.5/4.6)
動作要件:
- Windows 98/2000/Me/XP
- .net Framework 2以降(2/3/3.5)
使い方:
メインタブ
- 基本的には、起動して最小化するだけです。
- 通知を一時停止したい場合は、「通知を一時停止」ボタンをクリックすると、次の日の朝まで通知が無効になります。
- 常に電源が入っていて、音が鳴るパソコンが必要です。
- 「通知テスト」ボタンを押すと、通知と音が出るか事前に確認できます。
設定タブ
- 左ペインでは、通知したい時刻を設定します。
- 右ペイン
- 「1日の始まりの時刻」は、通知を一時停止した際、再び有効になる時刻を指定します。
- 「サウンド」は、通知の際に音を鳴らすかどうかを設定します。チェックを外すと音が鳴らなくなります。
- 「画面省電力を解除」は、チェックすると通知の前に画面の省電力設定を解除します。
- 「リセット」を押すと、設定が初期設定に戻ります。
- 「終了」を押すとアプリケーションを終了します。
その他
- 最小化すると、タスクトレイ(右下のとこ)に次のアイコンが登録されます。ダブルクリックするとアプリケーションを表示します。また、右クリックするとメニューが表示されます。
- 通知音は、wavフォルダの中のファイルを置き換えることで変更することができます。
- (0-23の数字).wav ファイルを作成または置き換えすると、その時刻の通知音が変更できます。削除すると、代わりにdefault.wavが流れます。
- default.wavファイルを置き換えると、指定時刻のファイルがない場合の通知音が変わります。削除すると鳴らなくなります。
- 24.wavを作成すると、テスト時の通知音を変更できます。
要求と実装はざっとこんな感じです。
要求:
- エアコンが止まる時間になったら、デスクトップに通知を表示し、音楽とメッセージを流す。
- エアコンが止まる時刻は21、22、23、0、2、4、6時であるが、今後変更される可能性もあるため、簡単に変更できるUIを設計する。
- エアコンの時刻はたまにずれるので、これを補正できる設計にする。
- 最小化するとタスクトレイに収納され、普段は邪魔にならない。間違って終了しない設計にする。
- ディスプレイで映画鑑賞などをしているときには通知を表示させない。かつ、再度有効にすることを忘れない設計にする。
実装:
- 言語: VB.net(使い慣れているからで特に意味はない)
- メイン画面と、設定ページを用意した。
- メイン画面に、通知を無効化/有効化できるボタンを設置した。ボタンが押し込まれているかどうかで、今通知が有効なのか無効なのかを判断できるようにした。通知を無効にしても、次の日の7時になると有効に戻るようにした。
- 間違って終了しないよう、右上のXボタンを排除し、最小化ボタンを設置した。終了はボタンではなく、設定画面に小さなリンクを設置した。
- 設定画面に、通知時間のCheckBoxと、分のUpDownBoxを設置した。
- Timerオブジェクトを使って60000ms(1分)ごとにシステム時刻をチェックし、設定時刻になったらバルーン通知を表示し、wavを再生するようにした。
- タスクトレイにアイコンを設置し、最小化時はタスクバーから消えるようにした。
その他:
- 通知のメロディ「もう一度君に逢えたら」を作曲した。
- 通知のアナウンスには、一太郎の読み上げ機能を使った。
その後、研究室のモニタが消えている状態では音が出ないことがわかったため、通知前にモニタの省電力モードを解除する機能をつけました。具体的には、通知の1分前に「Shift」キーのキーコードを送信するようにしました。参考: マウスふるふる(INASOFT)
時刻の繰り下がりの処理が面倒だったので、この機能を有効にした場合は0分ちょうどの通知ができない仕様となっています。
これから寒い日が続きます。是非、AirConNotifyで快適なラボ畜生活を。