LoginSignup
12

More than 5 years have passed since last update.

Alexaでネットワーク制御... ついでにクリスマスを彩る

Last updated at Posted at 2017-12-10

これは何?

Amazon Echo Dotにお願いして、ネットワークコントローラーのAPI経由で、ネットワーク機器の設定変更を行ってもらうサンプルです。なるべく楽ちんに行う方法を模索してみました。

最初、Vlan変更やスイッチポートの開閉をやってみたのですが、地味過ぎて悲しかったので、スイッチポートのPoE機能をネットワークAPI経由でenable/disableすることで、クリスマスツリーのイルミネーションを点灯・消灯を行ってみました。少しだけ、華やかになりました。

デモ1:Alexa、「Network close」「Network open」

実際には、Vlanを変更しています。(隔離Vlanと公開Vlanのイメージ)
*クリックするとYoutubeが開きます
Ask Alexa to open & close my switch port

デモ2:Alexa、「Network power on」「Network power off」

スイッチポートはUpのまま、PoEをOn/Offしています。(PoEから給電されたワイヤーライトが点灯・消灯)
*クリックするとYoutubeが開きます
Ask Alexa to on & off my switch port power

構成

物理構成

デモ1

自宅のネットワーク構成です。普段はラック奥に配置してます。
SS 2017-12-07 18.04.17.png

デモ2

※今回、購入したもの
PoEスプリッタ(TP-Link TL-POE10R)
LEDワイヤーライト(2.1mmジャック、12V入力)
・ミニツリー
SS 2017-12-07 18.04.31.png

サービス構成

SS 2017-12-10 11.54.34.png

必要アカウント

  1. Alexa Developerアカウント ... IFTTTから連携できるよう、登録しておく
  2. IFTTT ... 「My Applet」を作成、Amazon Alexaでトリガー、zapierへWebhookを発行
  3. zapier ... IFTTTからのWebhookを受け、登録したPythonスクリプトを実行
  4. Meraki ... zapierのPythonスクリプトから、自宅MerakiのダッシュボードAPIを操作

大まかな手順

方針

  • 自宅のネットワーク(Meraki)を使います。Cisco Merakiは、クラウド集中管理型で提供される、無線LAN、LANスイッチ、UTM(Unified Threat Management)などから構成されるネットワーク製品です。コントローラーがクラウドにあるので、API接続が楽ちんです。
  • Meraki Dashboard APIのオンラインドキュメントによると、スイッチポートやSSID、ルーティング設定など色々できそうです。
  • IFTTTを使ってAlexaを発行するイベントを用意します。IFTTTとは、「IF This Then That」というコンセプトで、Webサービスを連結するWebサービスだそうです
  • Alexaのスキル開発には、Amazon開発者コンソールからASK(Alexa Skill Kit)の準備、および、イベントに応答してコードを実行するエンドポイントとして推奨されるAWS Lambda(いわゆるサーバレス)か、自分のサーバを用意する必要があります。わかりやすく出来ているといっても、多少の学習コストがかかるので、今回は楽ちんであることを優先してIFTTTを使います。
  • IFTTTのアクションとして、Meraki APIへ接続するWebhookを設定できればと思ったのですが、Meraki APIでは、HTTPヘッダにX-Cisco-Meraki-API-Keyを認証情報として設定しておく必要があり、IFTTTのアクションではこれを満たせません。
  • zapierでは、WebHook受信をトリガーとして、自分で登録したPythonスクリプトを実行できます。逆に、zapierでは、現時点ではAlexaと連携してトリガーさせることはできないようです。
  • したがって、AlexaでIFTTTをトリガーしてWebHookをzapierに送信し、zapierはWebHookを受け取るとMeraki APIを操作するPythonスクリプトを実行する、という構成にしました。

zapierで実行するPythonスクリプトの登録

IFTTTからzapierに送信するWebHookで、カスタムBodyで変数を渡せるので、Vlan番号やEnable/Disableなど、Alexaの呼び出しに応じてzapierで実行するPythonスクリプトの変数を補完しています。

SS 2017-12-10 12.32.11.png

Meraki ダッシュボードAPI

参考までに、MerakiダッシュボードAPIを操作するサンプルです。めちゃくちゃシンプルです。詳細は、オンラインドキュメントを参照ください。

meraki_sample.py
import requests

url = "https://dashboard.meraki.com/api/v0/devices/スイッチシリアル番号/switchPorts/スイッチポート番号"

#ポートをenable、Vlanを10に変更
querystring = {"enabled":"true","vlan":"10"}

#ヘッダーのx-cisco-meraki-api-keyで認証
headers = {
    'content-type': "application/x-www-form-urlencoded",
    'x-cisco-meraki-api-key': "MerakiAPIキー",
    }

response = requests.request("PUT", url, headers=headers, params=querystring)
print(response.text)

Meraki ダッシュボードAPIを使うには、APIアクセスを有効化して、APIキーを取得しておく必要があります。
SS 2017-12-10 13.03.16.png

まとめ

  • ほとんどコードを書かずに、Alexaから自宅のネットワークを制御することができました。
  • Merakiに限らず、今どきの業務用ネットワーク機器やネットワークコントローラーはたいがいオープンAPIを備えているので、Alexa(Echo Dot)などのスマートスピーカーと連携させると楽しいですね。(ネットワーク側にAPIがなくても、Ansibleとか挟めば良いでしょう)
  • 音声一発で、ネットワークインベントリレポートを発行するとか、疎通テストを実行して結果を発行するとか、平常時と緊急時のQoSを入れ替えるとか、トラフィックをEast/Westに寄せてみたりとか、、
  • デジタルビルディングなるソリューションもあるようですね。
  • ネットワークエンジニアの守備範囲も、どんどん広くなるかも...
  • (遊んでいるつもりが、意外とお仕事になったりして)
  • 機能的な理解はもちろん、想像力も求められるかもしれません。

参考

  • シスコでは、「プログラミングとか知らないよ!」というネットワークエンジニアや、「ネットワーク製品のAPIとか知らないよ!」というアプリケーションエンジニアが、無料でこっそり自習できるラーニングラボサイトを提供しています。是非ご活用下さい。
  • Cisco DevNetサイトでは、APIやSDKをはじめとした技術情報や、イベント情報が公開されています。

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
12