Edited at

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

More than 1 year has passed since last update.


これは何?

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

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


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

実際には、Vlanを変更しています。(隔離Vlanと公開Vlanのイメージ)

*クリックするとYoutubeが開きます


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

スイッチポートはUpのまま、PoEをOn/Offしています。(PoEから給電されたワイヤーライトが点灯・消灯)

*クリックするとYoutubeが開きます


構成


物理構成


デモ1

自宅のネットワーク構成です。普段はラック奥に配置してます。


デモ2

※今回、購入したもの

PoEスプリッタ(TP-Link TL-POE10R)

LEDワイヤーライト(2.1mmジャック、12V入力)

・ミニツリー


サービス構成


必要アカウント



  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スクリプトの変数を補完しています。


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キーを取得しておく必要があります。


まとめ


  • ほとんどコードを書かずに、Alexaから自宅のネットワークを制御することができました。

  • Merakiに限らず、今どきの業務用ネットワーク機器やネットワークコントローラーはたいがいオープンAPIを備えているので、Alexa(Echo Dot)などのスマートスピーカーと連携させると楽しいですね。(ネットワーク側にAPIがなくても、Ansibleとか挟めば良いでしょう)

  • 音声一発で、ネットワークインベントリレポートを発行するとか、疎通テストを実行して結果を発行するとか、平常時と緊急時のQoSを入れ替えるとか、トラフィックをEast/Westに寄せてみたりとか、、


  • デジタルビルディングなるソリューションもあるようですね。

  • ネットワークエンジニアの守備範囲も、どんどん広くなるかも...

  • (遊んでいるつもりが、意外とお仕事になったりして)

  • 機能的な理解はもちろん、想像力も求められるかもしれません。


参考


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


  • Cisco DevNetサイトでは、APIやSDKをはじめとした技術情報や、イベント情報が公開されています。