在宅ワーク中に家族に会議中だとアピールするライフハック

現在在宅ワーク中なわけだけど, 家族にミーティング中ですとアピールするために, ミーティングはいい感じのランプを点灯させたりしている。

f:id:magaming:20211005194559j:plain
こんなやつ

ただミーティング始まる/終わったときに手動でON/OFFするの面倒なので, 自動化してみた。

事前準備

まずは遠隔で操作できるように, スマートプラグを用意。

TP-Link のやつが安いのでそれにした。IFTTT 対応しているなら別なやつでもよさそう。Amazon でポチったら速攻届いたので, Webhook の設定して HTTP request 投げて点いたり消えたりしたのを確認。

www.wassyoi-hack.com

Chrome 拡張を作る

弊社ではミーティングに Google Meets を使用しているので, meet.google.com ドメインを開いたときにランプを点灯, 閉じたら消灯, みたいにしたい。今回はそれ用の Chrome 拡張を作った。どうやら chrome.tabs API を使えば現在開いているタブ一覧とかを取得できるので, それを使ってみる。

developer.chrome.com

manifes.json はこんな感じ。

{
  "manifest_version": 2,
  "name": "Google Meets 開いたらランプつけるくん",
  "description": "Google Meets 開いたらランプつけてくれます",
  "version": "1.0",
  "background": {
    "scripts": ["event.js"],
    "persistent": false
  },
  "permissions": ["tabs", "*://maker.ifttt.com/*"]
}

permissions に ifttt のドメインを指定しているのは, こうしないと CORS エラーで怒られるため。あとは適当に js 本体を用意。

const googleMeetsDomain = "meet.google.com";
const turnOnUrl =
  "https://maker.ifttt.com/hogehogehogel";
const turnOffUrl =
  "https://maker.ifttt.com/fugafugafuga";

var isTurnOn = 0;

function watchTabs() {
  chrome.tabs.query({}, (tabs) => {
    const isOpeningMeets = tabs.some((tab) => {
      return tab.url.match(/meet.google.com/);
    });

    if (isOpeningMeets && !isTurnOn) {
      request(turnOnUrl);
      isTurnOn = 1;
    }

    if (!isOpeningMeets && isTurnOn) {
      request(turnOffUrl);
      isTurnOn = 0;
    }
  });
}

function request(url) {
  var req = new XMLHttpRequest();
  req.open("GET", url);
  req.send();
}

chrome.tabs.onUpdated.addListener(watchTabs);
chrome.tabs.onRemoved.addListener(watchTabs);

chrome.tabs.query で全タブの url をなめて, Meets の url が含まれていれば ON, 含まれていないなら OFF する感じ。onRemoved はタブを閉じたとき、onUpdated はタブが更新されたときのイベント。Chrome 自体を閉じたときはこれだとダメだけど, あんまり困ってないのでまぁよいか, となっている。

実際の様子

f:id:magaming:20211006201118g:plain

Meets だけじゃなくて, 例えば youtube でご機嫌な動画を流したときにミラーボールを点灯するとか, 仕事中に Twitter を見始めたら吹き矢が飛んでくる, みたいなことに応用が効きそう。