/LyncRingNotify

Notifier on Lync incoming call using USB vibration motor

Primary LanguageC#MIT LicenseMIT

Lync着信バイブレーション

Microsoft Lync(Skype for Business)で電話がかかってきた時に、 バイブレーションで通知するモノです。

写真

(銀色の部分が振動モータ)

特徴

  • USB接続バイブレーション用デバイス(USB接続振動モータ)
    • スマホやAndroidタブレットで使えるバイブレーション通知を、 PCでも使えるようになります。
  • 通知用にbatファイルを実行するので、通知方法はカスタマイズ可能
    • USB接続振動モータで通知
    • USB接続LEDで通知。blink(1)等
    • CDトレイを開いて通知(eject)
    • IRC(Internet Relay Chat)に通知。
      • Lync用Windowsマシンとは別のLinuxマシンを使って作業していても、 Linux上IRCクライアントに通知が表示されるので 着信に気付きやすくなります。
      • この通知に反応して、Microsoft Exchangeサーバから その人の予定を取得してチャンネルに発言する、 予定通知ボット との連携も可能。
    • Slackに通知
    • HipChatに通知

背景

会社の内線電話が、構内PHSからLyncになったのですが、 下記理由もあって着信音に気付かないことがあったので、 USB接続振動モータを動かすようにしてみました。

  • あまりスピーカ音量を大きくすると、何かの操作をした際に音が出て気になるので 音量は小さめ (PHS時代はPCにはスピーカも接続してなくて普段はミュート状態。 Lync電話の着信用に新たにスピーカを接続)
  • 近くの会議スペースの声が大きくて集中できないのでイヤホンをすると、 今度は着信音に気付きにくくなる

Lync用ハンドセットにバイブレーション機能があればよかったのですが、 配られたUSBハンドセットには付いてないようだったので。

IMを受信した際も、別のLinuxマシンを使っていると多くの場合は気付かないので、 同様にバイブレーションを行うようにしてみました。 通話とは別の振動パターンにしています。

構成

  • Lync着信検知プログラムLyncRingNotify.exe
    • 通知実行batファイルnotifier.bat
      • USB接続バイブレーション用デバイスusbvibration
      • IRC通知PowerShellスクリプト: ircsend.ps1
      • Slack通知PowerShellスクリプト: slacksend.ps1
      • HipChat通知PowerShellスクリプト: hipchatsend.ps1
      • CDトレイ制御PowerShellスクリプト: eject.ps1

LyncRingNotify.exeが同じディレクトリにあるnotifier.batを呼んで、 notifier.batがCOM経由でusbvibrationデバイスを制御します。

notifier.batの第1引数は以下のいずれか。

  • im: IM着信時
  • tel: 電話着信時
  • off: 通知オフ

第2引数は電話の場合の発信者。 tel:xxxxxxまたはsip:taro@example.jp

usbvibrationの制御は簡単なので直接notifier.batから実行していますが、 CDトレイ制御やIRC/Slack/HipChat通知はPowerShellスクリプトを実行しています。

セットアップ手順

  • usbvibration
  • LyncRingNotify
    • Lyncをインストール・起動
    • .NET Framework 4 Client Profileが入っていなければインストール
    • LyncSdkRedist.msiを実行してLync SDKをセットアップ
    • notifier.batをエディタで開いてCOM変数の値を、 Windowsのコントロールパネル→デバイス マネージャのポートで確認した usbvibrationのCOMの値に変更。
    • LyncRingNotify.exeを起動

USB接続バイブレーション用デバイスusbvibration

blink(1)のようなUSB接続LEDはあるので バイブレーションもあるといいかもと思って作成。

振動モータを使っています。 振動モータ用回路は、 『Prototyping Lab――「作りながら考える」ためのArduino実践レシピ』 にあるものそのままです。

バイブレーションを止めるためのタクトスイッチを付けました。 (LyncRingNotifyプログラム側から停止されるはずですが、念のため)

COM6等に対して、v512. 等の文字列を書き込むことで制御します。 (notifier.batから実行)

Timer3 でのPWMで振動モータを動かしています。 duty(0-1023)とperiod[ms]を指定可能です。 デフォルトはduty=512, period=900ms。 period指定は省略可能。

部品

内部写真

  • Pololu A-Star 32U4 Micro(Arduino互換機)

  • 振動モータ

  • トランジスタ KSC1815

  • 整流用ダイオード 11EQS06

  • 抵抗 2.2kΩ

  • プラケース [F52X22X13B]。 ケースに開いている穴に上の振動モータがぴったりはまります (少しカッターで広げないと入らないくらい)。

  • はさみで切れるユニバーサル基板

  • タクトスイッチ(2本足) 1個

Lync着信検知プログラムLyncRingNotify

Lync SDKを使っています。 使うためには、Lyncクライアントが動作している必要があります。

IRC通知PowerShellスクリプト: ircsend.ps1

IRCサーバに接続されるまで時間がかかる場合は、 ファイアウォールで113ポート(identd)を許可してみてください。 identdのタイムアウト待ちで時間がかかっている可能性があるので。

Slack通知PowerShellスクリプト: slacksend.ps1

Slack Web APIを使ってメッセージを送ります。 Invoke-RestMethodを使っているのでPowerShell 3.0以降で実行してください。

HipChat通知PowerShellスクリプト: hipchatsend.ps1

HipChat REST API v2を使ってroomにメッセージを送ります。 Invoke-RestMethodを使っているのでPowerShell 3.0以降で実行してください。

CDトレイ制御PowerShellスクリプト: eject.ps1

以下のスクリプトが使えます。 ただし、Close動作は一部修正要。 EjectMedia()でなくCloseTray()にする必要があります。

Eject/Close CD/DVD drive using PowerShell

他の通知方法案

  • ポート毎給電制御可能なUSBハブを制御して、 USB扇風機を動かしたりUSBデスクライトを点灯する

参考