20
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cisco Systems Japan Advent Calendar 2021 2ndAdvent Calendar 2021

Day 1

子育ての悩みを解決する「バルス・ボタン」を安価に作ってみた

Last updated at Posted at 2021-11-30

#1.はじめに
こんにちは。5歳と3歳の子ども持つサラリーマンです。
Cisco Systems Japan Advent Calendar 2021の記念すべき第1日目ということで緊張しておりますが、1日目は緩い内容でお送りしたいと思います。

お子さまがいらっしゃるご家庭では、必ずと言っても良いくらい__「Youtube見せるかどうするか問題」__で一度は悩まれた事があるのではないでしょうか?
我が家でも日々悩んでおりましたが、閲覧中は静かにしてくれているので結局は見せてしまっております。しかも二人それぞれに専用タブレットを与えてしまいました。

家中を走り回られるよりは、静かにしていてくれるので助かるのですが、やはり教育上悪いのではないかと心配が尽きません。

Pic1.png

一応、IT関係の会社に努めていますのでインフラで最低限の対策はしております。

①コンテンツ制御・・・Cisco Umbrellaで有害サイトをブロック
②Wi-Fi利用時間の制限・・・Cisco Merakiのスケジュール機能でAM6:00-21:00だけ使わせる

pic2.png

これらを子ども用SSIDとして作成し、子ども用のタブレットを接続させています。

ただ、システム的には完璧だと信じていても、予期せぬエラーが発生するのがITの世界です。
子どもの機嫌次第でせっかくの対策も意味がなくなり、子どもはYoutubeを見続けます。
pic3.png

これを Youtube無限ループ問題 と呼びます。

このYoutube無限ループ問題を解決するためには、フレキシブルに対処できるシステムが必要になるなと考えました。ということで作ってみました。

#2.やりたいこと
任意のタイミングで SSIDをON/OFFできる 仕組みを格安に作ろう!
(小遣い制のサラリーマンですので、格安であることがMUST要件)

そして、いくつかの実装案を考えてみました。
pic4.png
音声操作は、既にテレビのON/OFF制御を3歳児に突破されているので、IoTボタンで制御する方式にしました。このIoTボタンは普段は私のデスクに隠しておきます。

#3.用意したもの

pic6.png
① RaspberryPi 4
 去年作ったWebex表示灯の物を活用

② IoTボタン
 高価なIoTボタンは数千円するので、AmazonDashで使われていたIoTボタンをフリマサイトで定価500円を値切って300円で購入

無線LANアクセスポイントの__Meraki MR44__は既に自宅で使っているので出費は実質300円!

#4.完成品
以下が完成品です。
pic7.png

pic8.png
WiFiを破壊するボタン “バルス・ボタン” が完成しました!
子どもたちは何が起きたのかわからないまま、Youtubeを見るのを諦めてくれました。

#5.システム構成
pic9.png
① IoTボタンを押すと、RaspberryPi上で動くamazon-dashデーモンがPythonコードを実行
② PythonがMerakiの子ども用SSIDの状態を確認し、Enable/Disableを実行
③ 子ども用SSIDが有効・無効になる

#6.実行コード

  1. 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 #実行コマンド
  1. Pythonで動かすコード(wifi-button.py)
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 サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。

20
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?