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

ただミーティング始まる/終わったときに手動でON/OFFするの面倒なので, 自動化してみた。
事前準備
まずは遠隔で操作できるように, スマートプラグを用意。
TP-Link のやつが安いのでそれにした。IFTTT 対応しているなら別なやつでもよさそう。Amazon でポチったら速攻届いたので, Webhook の設定して HTTP request 投げて点いたり消えたりしたのを確認。
Chrome 拡張を作る
弊社ではミーティングに Google Meets を使用しているので, meet.google.com ドメインを開いたときにランプを点灯, 閉じたら消灯, みたいにしたい。今回はそれ用の Chrome 拡張を作った。どうやら chrome.tabs API を使えば現在開いているタブ一覧とかを取得できるので, それを使ってみる。
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 自体を閉じたときはこれだとダメだけど, あんまり困ってないのでまぁよいか, となっている。
実際の様子

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