ツアー - novars-jp/MaBeeeMacApp GitHub Wiki

ツアー

  • コマンドラインからMaBeeeを操作します。
  • ここではPythonの簡単なスクリプトを使用しましたが、curlでも、nodeでも、ブラウザでも同じことができます。

準備

MaBeee.app

  • リポジトリをダウンロードまたはクローンして、zipファイルを解凍、中にあるMaBeee.appを実行してください。
  • メニューバーに電池のアイコンが表示されます。
  • 初回実行時は、右クリックのコンテキストメニューから「開く」で実行してください。

mabeee.py

  • リポジトリにある簡単なPythonスクリプトです。
  • 引数のパス(/devicesなど)をhttp://localhost:11111にくっつけて、リクエストを送信します。
  • 結果のステータスコードを出力します。
  • 存在する場合はJSONを出力します。
  • requestsモジュールをインストールする必要がある場合があります。
    • pip install requests
    • 私の環境ではsudo -H pip install requestsでした。

使用例

$ python mabeee.py /scan
http://localhost:11111/scan
200
{
    "scan": false
}

/scanの例です。

  • $ python mabeee.py /scan

    • 入力するコマンドです
  • http://localhost:11111/scan

    • 送信するリクエストです
  • 200

    • HTTPステータスコードです。
    • この場合正常終了です。
  • { "scan": false }

    • 改行をなくしていますが、これがレスポンスのボディになります。
    • この場合スキャンをしていない状態です。

ツアー開始

とりあえず実行

$ python mabeee.py
http://localhost:11111/
200
{
    "devices": [], 
    "scan": false, 
    "state": "Unknown"
}

stateがUnknownで起動直後の状態です。リクエストがあってからBluetoothを起動します。もう一度、今度は/stateだけ実行してみます。

$ python mabeee.py /state
http://localhost:11111/state
200
{
    "state": "PoweredOn"
}

PoweredOnになりました。Bluetoothは問題なく起動したようです。次にスキャンの状態を見てみます。

$ python mabeee.py /scan
http://localhost:11111/scan
200
{
    "scan": false
}

当たり前ですがスキャンしていません。スキャンを開始します。

$ python mabeee.py /scan/start
http://localhost:11111/scan/start
200

開始できたようなので、もう一度スキャンの状態をみてみます。

$ python mabeee.py /scan
http://localhost:11111/scan
200
{
    "scan": true
}

されています。スキャンされたデバイスの一覧を見てみます。

$ python mabeee.py /devices
http://localhost:11111/devices
200
{
    "devices": []
}

まだヒットしていないようです。スキャンにヒットするのに多少時間がかかります。MaBeeeをいれたおもちゃの電源がONになっているかも確認して、もう一度実行します。

$ python mabeee.py /devices
http://localhost:11111/devices
200
{
    "devices": [
        {
            "battery_voltage": 0, 
            "battery_voltage_updated_at": "2016-08-16T03:14:53.162Z", 
            "id": 1, 
            "name": "MaBeee002234", 
            "pwm_duty": 0, 
            "rssi": -73, 
            "rssi_updated_at": "2016-08-16T03:15:27.160Z", 
            "state": "Disconnected"
        }
    ]
}

1台ヒットしました。idが1です。このidを指定して、もう一度デバイスの情報をみてみます。

$ python mabeee.py /devices/1
http://localhost:11111/devices/1
200
{
    "battery_voltage": 0, 
    "battery_voltage_updated_at": "2016-08-16T03:14:53.162Z", 
    "id": 1, 
    "name": "MaBeee002234", 
    "pwm_duty": 0, 
    "rssi": -73, 
    "rssi_updated_at": "2016-08-16T03:15:27.160Z", 
    "state": "Disconnected"
}

idが1のデバイスの情報だけ取得できます。このデバイスに接続します。

$ python mabeee.py /devices/1/connect
http://localhost:11111/devices/1/connect
200

厳密には接続の指示だけ出すので、すぐに200が返ってきます。もう一度状態を見てみます。

$ python mabeee.py /devices/1
http://localhost:11111/devices/1
200
{
    "battery_voltage": 0, 
    "battery_voltage_updated_at": "2016-08-16T03:14:53.162Z", 
    "id": 1, 
    "name": "MaBeee002234", 
    "pwm_duty": 0, 
    "rssi": -69, 
    "rssi_updated_at": "2016-08-16T03:16:29.869Z", 
    "state": "Connecting"
}

stateがConnectingになっています。接続して、MaBeeeの初期化などを行なっている状況です。もう一度。

$ python mabeee.py /devices/1
http://localhost:11111/devices/1
200
{
    "battery_voltage": 0, 
    "battery_voltage_updated_at": "2016-08-16T03:14:53.162Z", 
    "id": 1, 
    "name": "MaBeee002234", 
    "pwm_duty": 0, 
    "rssi": -70, 
    "rssi_updated_at": "2016-08-16T03:16:35.535Z", 
    "state": "Connected"
}

Connectedになりました。では出力を調整してみます。

$ python mabeee.py /devices/1/set?pwm_duty=100
http://localhost:11111/devices/1/set?pwm_duty=100
400
{
    "message": "The operation is not allowed while scanning"
}

スキャン中は出力を調整できないようになっています。できなくないのですが、ものすごい遅延が発生するので現状はできなくしています。スキャンを停止します。

$ python mabeee.py /scan/stop
http://localhost:11111/scan/stop
200

スキャンの状態を見ます。

$ python mabeee.py /scan
http://localhost:11111/scan
200
{
    "scan": false
}

もう一度、MaBeeeの出力を100に指定してみます。

$ python mabeee.py /devices/1/set?pwm_duty=100
http://localhost:11111/devices/1/set?pwm_duty=100
200

私はトーマスのプラレールにセットしているのですが、トーマスが走りだしました。とりあえず止めます。

$ python mabeee.py /devices/1/set?pwm_duty=0
http://localhost:11111/devices/1/set?pwm_duty=0
200

止まりました。0から100の間でいろいろ設定してみてください。

$ python mabeee.py /devices/1/set?pwm_duty=20
http://localhost:11111/devices/1/set?pwm_duty=20
200

20くらいじゃ走らないですね。40くらいがゆっくりみたいな感じでした。ここで、全体の情報を見てみます。

$ python mabeee.py
http://localhost:11111/
200
{
    "devices": [
        {
            "battery_voltage": 0, 
            "battery_voltage_updated_at": "2016-08-16T03:14:53.162Z", 
            "id": 1, 
            "name": "MaBeee002234", 
            "pwm_duty": 20, 
            "rssi": -85, 
            "rssi_updated_at": "2016-08-16T03:20:02.056Z", 
            "state": "Connected"
        }
    ], 
    "scan": false, 
    "state": "PoweredOn"
}

次にバッテリーの電圧を取得します。

$ python mabeee.py /devices/1/update?p=battery_voltage
http://localhost:11111/devices/1/update?p=battery_voltage
200

これもすぐに返ってきます。デバイスに問い合わせて値が更新されているはずなので、情報を表示してみます。

$ python mabeee.py /devices/1
http://localhost:11111/devices/1
200
{
    "battery_voltage": 1.355294, 
    "battery_voltage_updated_at": "2016-08-16T03:21:13.076Z", 
    "id": 1, 
    "name": "MaBeee002234", 
    "pwm_duty": 20, 
    "rssi": -85, 
    "rssi_updated_at": "2016-08-16T03:20:02.056Z", 
    "state": "Connected"
}

battery_voltageとbattery_voltage_updated_atの値が更新されました。未使用の電池の場合で1.5vなので、これはすこし残量がない状態ですね。トーマスは本当はpwm_duty=20でも走るのかもしれません。

次はRSSIをアップデートしてみます。RSSIはスキャン時は自動的に更新されますが、接続中は更新を指示する必要があります。

$ python mabeee.py /devices/1/update?p=rssi
http://localhost:11111/devices/1/update?p=rssi
200

デバイス情報をみてみます。

$ python mabeee.py /devices/1
http://localhost:11111/devices/1
200
{
    "battery_voltage": 1.355294, 
    "battery_voltage_updated_at": "2016-08-16T03:21:13.076Z", 
    "id": 1, 
    "name": "MaBeee002234", 
    "pwm_duty": 20, 
    "rssi": -74, 
    "rssi_updated_at": "2016-08-16T03:26:55.731Z", 
    "state": "Connected"
}

rssiとrssi_updated_atが更新されました。

では最後に切断してみます。

$ python mabeee.py /devices/1/disconnect
http://localhost:11111/devices/1/disconnect
200

おもちゃは止まりました。もう一度情報を見てみます。

$ python mabeee.py 
http://localhost:11111/
200
{
    "devices": [], 
    "scan": false, 
    "state": "PoweredOn"
}

デバイス消えました。接続するにはまたスキャンする必要があります。

こんな感じになります、遊んでみてください!