現在在宅ワーク中なわけだけど, 家族にミーティング中ですとアピールするために, ミーティングはいい感じのランプを点灯させたりしている。
ただミーティング始まる/終わったときに手動で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 を見始めたら吹き矢が飛んでくる, みたいなことに応用が効きそう。