Webexと連動した「会議中」標示灯を作ってみた。

#１．はじめに
はじめまして。4歳と2歳の子供を持つサラリーマンです。
COVID-19でテレワークが浸透し、自宅からWeb会議に参加するのが当たり前の世界になりました。

一方で、自宅でWeb会議の最中に、家族にWeb会議に乱入されてしまい困った方も多いのではないでしょうか。
特に2020年5月の緊急事態宣言時には保育園も登園禁止となり、我が家では2人の男児が家中を駆け回っており悲惨な状況でした。
![realtelework.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929216/e5080ad1-6a3a-8ce6-153e-58a11cb39d3b.png)


それはどのご家庭も同じ状況のようで、SNSで会議中はお手製の看板を扉にぶら下げている知人を見つけて思いつきました。
![inmeeting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929216/732dba56-4222-924e-9e47-0a746da018f4.png)



__「これ、自動化できないかな」__

WebexTeamsには以下のステータスがあり、これと標示灯を連動させられたらいいな。
![status.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929216/3f257ed6-8cb1-3583-0250-d7977173e001.jpeg)


ということで、WebexTeamsのステータスと連動した「会議中」標示灯を手作りしてみました。

#２．やりたいこと
・Webex会議中になると標示灯が点灯し、会議が終わると消灯するシステムを__格安で作る__
![tobe.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929216/f1c0b69d-35a2-fa69-ef96-5ab506e47562.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929216/b680e85c-e657-c6a1-8481-fdbf6b040fb5.png)


#３．完成品

<p class="codepen" data-height="425" data-slug-hash="poEyezv" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 0; padding: 0;">
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
　
#４．用意したもの
![tool.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929216/71a4d9a8-5960-81c3-4a5a-be1407a95f1a.png)
① 整理BOX（100円ショップ）
② USB調光ライト（100円ショップ）
③ RaspberryPi 4 
④ WiFi SmartPlug
⑤ 自作シール

※WebexTeamsとWebexMeetingは既に利用中、RaspberryPiとSmartPlugは既に持っていたので出費は200円程度

#５．システム構成
![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929216/f96611a2-d97d-5f2e-2553-0663a8ec34be.png)

① RaspberryPi上で動くPythonプログラムがWebexTeamsのステータスをRestAPIで定期的に監視
② スタータスが "meeting"になったらIFTTTへスマートプラグをONにする指示を送出
　 スタータスが "active"になったらIFTTTへスマートプラグをOFFにする指示を送出
③ IFTTTに登録されたスマートプラグへON/OFF指示

#６．実行コード
下記Pythonコードをcronで定期実行

```python:meeting_status.py
import requests
import json

url = "https://webexapis.com/v1/people/me"
ifttt_url_off = "https://maker.ifttt.com/trigger/Plug_Off/with/key/fVZMBjxxxxxxxxxxxxxxxxxxxxxxxxxx"
ifttt_url_on = "https://maker.ifttt.com/trigger/Plug_ON/with/key/fVZMBjYQxxxxxxxxxxxxxxxxxxxxxxxxxx"
#IFTTTで生成されたURLを記入

headers = {
    'authorization': "Bearer MTQzNDQ4YTgtMTAyMC00YTM4LWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
#実際のAPI Tokenを入力（参考URL）
    'content-type': "application/json; charset=utf-8",
    'cache-control': "no-cache",
    }

response = requests.request("GET", url, headers=headers)
print(response.text)


data = response.json()
print(json.dumps(data, indent=4))

print(json.dumps(data["status"]))

kekka = json.dumps(data["status"])

if kekka ==  '"active"':
        print("Activeです。プログラムを終了します。")
        response = requests.post(ifttt_url_off)
elif kekka ==  '"meeting"':
        print("meetingです。プログラムを終了します。")
        response = requests.post(ifttt_url_on)
else:
        print("non-actです。プログラムを終了します。")
```
__IFTTT__
今回は詳細は割愛しますがこんな感じです。非常に簡単に作成できます。
![ifttt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929216/93da762b-b494-e9f9-5397-02a3bb3fb8d7.png)

#７．終わりに
・簡単なPythonコードとRestAPI、そして少しの出費だけでWeb会議と連動した
　「会議中」標示灯を作れました。
・今回はなるべく出費を抑るために標示灯を自作しましたが、Amazonには既製の標示灯が
　販売されているので作るのが面倒な方はそちらを購入するのも良いかと思います。
・WebexTeamsではRestAPIのTokenが12時間で期限が切れます、このプログラムでは
　Tokenの再更新まで組み込んでいません。
・ステータスをWebexTeamsから取得しているのは、WebexMeetingだけでは会議状況を
　取得するのが難しいためです。
　（もし直接取得できるAPIを見つけられたら更新します）

#８．参考URL
自分のWebexAPIAceessTokenの確認方法：
https://developer.webex.com/
Getting Started with the Webex API項にある「Your Personal Access Token」
WebexTeamsでの会議ステータス：
https://help.webex.com/ja-jp/wghlt5/Webex-Teams-See-People-s-Availability
WebexTeamsでの会議ステータスAPI：
https://developer.webex.com/docs/api/v1/people
IFTTTでのスマートプラグ操作:
https://ifttt-japan.club/ifttt-smart-plug

#免責事項
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。