#1.はじめに
こんにちは。5歳と3歳の子ども持つサラリーマンです。
Cisco Systems Japan Advent Calendar 2021の記念すべき第1日目ということで緊張しておりますが、1日目は緩い内容でお送りしたいと思います。
お子さまがいらっしゃるご家庭では、必ずと言っても良いくらい__「Youtube見せるかどうするか問題」__で一度は悩まれた事があるのではないでしょうか?
我が家でも日々悩んでおりましたが、閲覧中は静かにしてくれているので結局は見せてしまっております。しかも二人それぞれに専用タブレットを与えてしまいました。
家中を走り回られるよりは、静かにしていてくれるので助かるのですが、やはり教育上悪いのではないかと心配が尽きません。
一応、IT関係の会社に努めていますのでインフラで最低限の対策はしております。
①コンテンツ制御・・・Cisco Umbrellaで有害サイトをブロック
②Wi-Fi利用時間の制限・・・Cisco Merakiのスケジュール機能でAM6:00-21:00だけ使わせる
これらを子ども用SSIDとして作成し、子ども用のタブレットを接続させています。
ただ、システム的には完璧だと信じていても、予期せぬエラーが発生するのがITの世界です。
子どもの機嫌次第でせっかくの対策も意味がなくなり、子どもはYoutubeを見続けます。
これを Youtube無限ループ問題 と呼びます。
このYoutube無限ループ問題を解決するためには、フレキシブルに対処できるシステムが必要になるなと考えました。ということで作ってみました。
#2.やりたいこと
任意のタイミングで SSIDをON/OFFできる 仕組みを格安に作ろう!
(小遣い制のサラリーマンですので、格安であることがMUST要件)
そして、いくつかの実装案を考えてみました。
音声操作は、既にテレビのON/OFF制御を3歳児に突破されているので、IoTボタンで制御する方式にしました。このIoTボタンは普段は私のデスクに隠しておきます。
#3.用意したもの
① RaspberryPi 4
去年作ったWebex表示灯の物を活用
② IoTボタン
高価なIoTボタンは数千円するので、AmazonDashで使われていたIoTボタンをフリマサイトで定価500円を値切って300円で購入
無線LANアクセスポイントの__Meraki MR44__は既に自宅で使っているので出費は実質300円!
WiFiを破壊するボタン “バルス・ボタン” が完成しました!
子どもたちは何が起きたのかわからないまま、Youtubeを見るのを諦めてくれました。
#5.システム構成
① IoTボタンを押すと、RaspberryPi上で動くamazon-dashデーモンがPythonコードを実行
② PythonがMerakiの子ども用SSIDの状態を確認し、Enable/Disableを実行
③ 子ども用SSIDが有効・無効になる
#6.実行コード
- amazon-dash設定ファイル(amazon-dash.yml)
settings:
delay: 5
devices:
88:71:e5:xx:xx:xx: # Amazon DashボタンのMacAddress
name: Wi-Fi button # 任意の名前
user: pi # root権限のあるアカウント
cmd: python3 /home/pi/amazon-dash/wifi-button.py #実行コマンド
- Pythonで動かすコード(wifi-button.py)
import requests
import json
# Set header parameters
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"X-Cisco-Meraki-API-Key" : "c3fec0420xxxxxxxxxxxxxxxxxxxxxxxxx"
}
payload = '''{
"enabled": false
}'''
payload2 = '''{
"enabled": true
}'''
url = "https://api.meraki.com/api/v1/networks/L_6980xxxxxxxxxx/wireless/ssids/2"
# Send request and get response
response = requests.request("GET", url, headers=headers)
data = response.json()
print(json.dumps(data, indent=4))
print(json.dumps(data["enabled"]))
kekka = json.dumps(data["enabled"])
if kekka == 'true':
print("SSIDは現在ONでした。SSIDをOFFにします。")
response = requests.request('PUT', url, headers=headers, data = payload)
elif kekka == 'false':
print("SSIDは現在OFFでした。SSIDをONにします。")
response = requests.request('PUT', url, headers=headers, data = payload2)
else:
print("変更されませんでした。")
#7.終わりに
・簡単なPythonコードとRestAPI、そして少しの出費だけで__Wi-Fiを破壊するバルス・ボタン__が作れました。
・非常にシンプルですが様々なシーンで応用が効くシステムだと思います。
(例:公共施設のゲストWi-Fi、臨時用SSID etc.)
#8.参考URL
Amazon dashボタンの初期化方法
https://blog.christophermullins.com/2019/12/20/rescue-your-amazon-dash-buttons/
Amazon dashデーモンのインストール
https://qiita.com/retrorocket/items/0a84d6e1f40ad3e11769
MerakiのSSID制御API
https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-ssid
#余談
このボタンを作成したのは2021年10月頃ですが、Merakiの同僚に見せたところ「それ、Merakiが発売する予定あるよ」とのことでした。。。もう少ししたらMeraki専用のIoTボタンが発売されるかもしれませんね。ただ、300円では買えないと思いますので私はこれで十分です(笑)
#免責事項
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。