MRが楽しい

MRやVRについて学習したことを書き残す

HoloLensのRestAPIをPythonで実行する その1(HoloLensの情報取得)

本日は HoloLens の調査枠です。
HoloLens は開発者モードで DevicePortal がONになっているとき、RestAPI が利用できます。
今回は Python を用いて、RestAPI で HoloLens の情報取得を行ってみます。

なお、HoloLens で利用可能な API は以下の公式ページにまとめられています。
・デバイス ポータル コア API リファレンス(すべての Windows 10 デバイスに共通する API)
docs.microsoft.com
・デバイス ポータル Mixed Reality API リファレンス(HoloLens で利用できるすべての REST API の拡張リスト)
docs.microsoft.com

「Requests」のインスト―ル

今回は Python で簡単にWEB接続を行えるパッケージ「Requests」を利用します。
Pythonの標準パッケージではなく、外部パッケージになので別途インストールが必要です。
以下の環境構築を実施していれば、Python のパッケージ管理システムである pip がインストールされており、利用できます。
bluebirdofoz.hatenablog.com

ただし、デフォルトでは pip へのパスが通されていません。
以下のパスを環境変数の"PATH"に登録するか、このディレクトリ直下で直接 pip を実行する必要があります。
・C:\Users\(ユーザ名)\AppData\Local\Programs\Python\Python37\Scripts
f:id:bluebirdofoz:20190120142159j:plain

因みにファイルエクスプローラディレクトリを参照すれば、Shift + 右クリックで「PowerShellウィンドウをここに開く」メニューが利用できます。
ディレクトリ直下で直接実行する場合は、これを利用すると手間が省けます。
AppData は隠しフォルダなのでファイルエクスプローラで参照する際はパスを直接叩くか、隠しフォルダを表示してください。
f:id:bluebirdofoz:20190120142207j:plain

どちらかの方法で pip へのパスを通したら以下のコマンドを実行して「Requests」をインストールします。
・pip install requests
f:id:bluebirdofoz:20190120142215j:plain

これで「Requests」パッケージのインストールは完了です。
f:id:bluebirdofoz:20190120142223j:plain

なお、proxy 下で実行する場合は pip install コマンドの前に以下のコマンドで proxy の環境変数をしておく必要があります。
・set HTTP_PROXY=http://192.168.X.X:XXXX
・set HTTPS_PROXY=http://192.168.X.X:XXXX

pythonサンプルコード

試しに HoloLens の残りバッテリーを取得する python スクリプトを作成します。
残りバッテリーを取得する API は以下の /api/power/battery です。
f:id:bluebirdofoz:20190120142234j:plain

/api/power/battery は最大電池容量と残電池容量の数値を返すのでパーセンテージを取得したい場合は計算を行う必要があります。
以下の通り、python スクリプトを作成しました。
・GetBattery.py

# import
import requests
import base64
import os

# 実行指定で呼び出されているかチェック
if __name__ == "__main__":

    print('--------------------------- START ---------------------------')
    # DevicePortal接続のための設定項目
    # username:DevicePortalアクセスのユーザ名
    # password:DevicePortalアクセスのパスワード
    # ipaddress:DevicePortalアクセスのIPアドレス
    # isVerify:証明書の利用(DevicePortalの場合は自己証明書なので無視する)
    username = 'USERNAME'
    password = 'PASSWORD'
    ipaddress = '192.168.XX.XXX'
    isVerify = False

    # RestAPIアクセスのURLを作成
    api = '/api/power/battery'
    url = 'http://' + ipaddress + api

    # RestAPIのURLと設定を指定してGET実行
    response = requests.get(url, auth=(username, password), verify = isVerify)

    # RestAPIの応答jsonメッセージを受信
    downloadData = response.json()

    # 受信したjsonメッセージを標準出力で確認
    print('--------------------------- RESPONSE JSON ---------------------------')
    print(downloadData)

    # jsonメッセージから必要なデータを取得
    # 最大電池容量
    maximumKey = 'MaximumCapacity'
    maximumBattery = downloadData[maximumKey]
    # 残電池容量
    remainingKey = 'RemainingCapacity'
    remainingBattery = downloadData[remainingKey]
    # パーセンテージの計算
    str = '{:.2%}'.format(remainingBattery / maximumBattery)

    # 取得したデータを標準出力で表示
    print('--------------------------- RESULT ---------------------------')
    print('MaximumCapacity:{0},RemainingCapacity:{1},Battery:{2},'.format(maximumBattery, remainingBattery,str))

    print('--------------------------- END ---------------------------')

実行してみた結果が以下になります。
現在の残りバッテリーがパーセンテージで確認できました。
f:id:bluebirdofoz:20190120142244j:plain

このように RestAPI を実行することでブラウザ以外からも HoloLens の情報を取得することが可能になります。

次はGETメッセージにパラメータを追加し、ファイルをダウンロードしてみます。
bluebirdofoz.hatenablog.com