オンラインミーティングが始まったら自動で点灯するオンエアーネオンライト作った

家で仕事するようになったときからずっとオンラインミーティング始まったら自動で点灯するネオンサインみたいなのあったら良いなぁと思ってた。 まぁぼんやり思ってるだけだったんだけど、ちょっとやる気が出たのでガッと組んでみた(確定申告の書類集めとかしてるとそうなるよねー)

雑要件定義

  • 絶対に自動でON/OFF
  • 取り回しのためPCとは直接有線で繋げない
  • ミーティングはZoomだったりGoogle Meetだったりあるのである程度汎用的な方法

ミーティングの自動判別

たまにネットで出てくる記事でよく使われているZoomアプリのプロセス監視するのはGoogle Meetに対応できないので無し。カレンダー監視してミーティングの時間とか考えたけど、精度低いし突発の仕様相談とかに対応できないので無し。

結局仕事のミーティングはすべてカメラONにして行っているのでカメラの監視をすることにした。たまにゲームでDiscordつかって音声だけのときもあるけど、奥さん的要件としてはカメラに映り込みたくないというのが大きのでカメラの監視をすることにした。

で、カメラがつながっているかどうかではなく、実際に起動しているかどうかの監視はlsofコマンドで行える。

# lsof /dev/video0 
COMMAND    PID     USER FD   TYPE DEVICE SIZE/OFF NODE NAME
pipewire  2019 yoshiori 52u   CHR   81,0      0t0 2289 /dev/video0
wireplumb 2020 yoshiori 47u   CHR   81,0      0t0 2289 /dev/video0

linuxだとこんな感じ。(pipewireとかwireplumbはWayland下でオーディオデバイス扱うやつなので無視して大丈夫) 多分Macでも似たようなもんだと思う。

あとはこれをループで監視すればON/OFFが判別できる。

ライトのオンオフをリモートで操作

PCで会議のイベントは取れるようになったのであとはプログラムからネオンライトを操作できれば良い。昔ならIFTTTとか使おうとか考えたんだけど、今やIFTTTのwebhookは高級有料プランになってしまったので無し。スマートデバイス、PCから扱うのはじつは面倒くさいんだよなぁとか思いつつ、なんか他に無いかなぁと思ってたらSwitchBotはAPIを公開してた!マジでAPI公開してる企業は政府から補助出てほしい!!ありがとうSwitchBot!!

で、Rubyのgemもあったのでめっちゃあっさりできた。

    class Light
      def client
        @client ||= Switchbot::Client.new(ENV["TOKEN"], ENV["SECRET"])
      end

      def on
        client.device(ENV["DEVICE_ID"]).on
      end

      def off
        client.device(ENV["DEVICE_ID"]).off
      end
    end

これで道具は揃ったのであとは作るだけ。

材料

ON AIR ネオンライト

物理スイッチなので本体のスイッチはいれっぱなしにしてスマートプラグでON/OFF操作できる。あと電池も対応しているけど有線でも使えて接続口がUSB-Cなのも地味に嬉しい。

スマートプラグ

商品説明にはAPIについて全く触れられていない。なぜなのか!?(マニアックだから?)

【Option】薄型 USB-C ケーブル

USB-C のコネクタ側が薄型のL字なので接続時に綺麗に見える。初代Apple Pencilの突き刺さりが美しいと思った人はいらないと思う。

プログラム

github.com

ということで前回かいた「超楽にRubyで雑に書いたスクリプトをsystemdで管理したい! - 宇宙行きたい」はこれを動かすためでした。

まとめ

SwitchBotが実はAPI公開しててさくっと色々なハックが出来るのはもっともっと知られてほしい!!!!最高便利!ありがとう!!!