Skip to content

MQTT API マニュアル(Ver1.04)

MQTT API マニュアル 情報

  • ALIファームウェア バージョン: ver. 1.04

  • 著者: Keigan

MQTT API 共通

基本

MQTT の仕組みにより、Topicsubscribe (購読)することにより、⾃動的にデータが publish (発⾏)される。ステータスの取得 により、⾃機の状態を把握することができる。

アドレス

MQTT API にアクセスするためのアドレスは以下となる。

MQTTプロトコルで接続mqtt://[IP Address]:9075/[Topic]
WebSocketプロトコル経由で接続 (ブラウザ等で使用時)ws://[IP Address]:9076/[Topic]

[IP Address]

  1. 直接 AMR のアクセスポイントに接続する場合・・・10.0.60.1

  2. ローカルエリアネットワークLAN経由で接続する場合・・・192.XXX.X.XX

LAN経由の場合は、ルーター側でIPアドレスを割り当て、または固定設定を行うことにより、決定される。

[Topic]

次項 MQTT API リスト で定義される Topic (トピック)を使⽤する。

MQTT API リスト

No.FunctionDirectionTopic
QS-1マシンのステータスを取得するPublishstatus

QS-1 ステータスの取得

TopicFunctionDirection
statusマシンのステータスを取得するPublish

データの取得例:

※location内の x, y, およびangle の theta についてはREST API ドキュメント(v1.0.2以降)を参照すること。
json
{
  "map": {
    "mapId": "<uint32>"  // mapId
  },
  "operation_state": "<string>",  // ex) "idle"
  "battery": {
    "percentage": "<uint32>",  // 0 to 100 [%]
    "voltage": "<float32>"  // battery voltage [V]
  },
  "timestamp": "<string>",  // ex) "2012-04-21T18:25:43-05:00"
  "location": {
    "x": "<float64>",
    "y": "<float64>",
    "angle": {
      "theta": "<float64>", 
      "y": "<float64>",  // 予約領域
      "z": "<float64>",  // 予約領域
      "x": "<float64>"  // 予約領域
    }
  },
  "taskset": {
    "state": "<string>",  // "idle"または"executing"
    "cmdSetId": "<uint32>",  // cmdSetId
    "cmdIndex": "<uint32>",  // number of cmdSetId
    "resume_cmd_index": "<uint32>",
    "resume_available": "<bool>"
  },
  "error": {
    "code": "<uint32>",  // error code
    "description": "<string>"
  }
}
キー値の説明備考
operation_stateAMRの状態 Idle:アイドル中

Executing:タスクセットの実行中

Mapping:マップの作成中

Error:エラー

batteryバッテリー状態 Percentage:残量 [%]

Voltage:電圧 [V]

time stamp発行された時刻(UNIX_TIME)
locationAMRの現在位置
(選択されているマップの
原点座標を基準とする 位置座標と向き
x:現在位置のx座標

y:現在位置のy座標

json
{
"angle": {
  "theta": "現在位置の角度",//現在位置の角度
  "y": 0,  //予約領域
  "z": 0,  //予約領域
  "x": 0   //予約領域
}
}
tasksetタスクセットの状態 State:タスクセットの実行状態

cmdSetId:現在実行中のタスクセットid

cmdIndex:現在実行中のタスクインデックス(何番目のタスクか)

resume_cmd_index: タスクセット再開時に実行するタスクid

resume_available:タスクセットの再開可否

errorエラー状態 code:エラーコード

description:エラー内容の説明

参考コード例 Python

python
import paho.mqtt.client as paho             #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(self,mqttc, obj, rc):
print("rc: "+str(rc))

def on_message(self, obj, msg):
print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
print(string)

if __name__ == '__main__':
mqttc = paho.Client()#mqtt
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_subscribe = on_subscribe

mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
mqttc.subscribe("status", 0)                 #TOPIC

mqttc.loop_forever()

参考コード例 Javascript

html
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js"     
            type="text/javascript"> //外部スクリプト(paho-mqtt)のURIを指定 
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX"                 // Address of broker(IPアドレス)
            ,9076                          // Websocketへの接続時は"9076"
            ,"web_" + (Date.now ()+1)      // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess:onConnect,            // 接続に成功したときのコールバック
            onFailure:doFail                // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
                // トピックを購読する
                client.subscribe("status");
                // トピックにメッセージを発行
                message = new Paho.MQTT.Message("");
                message.destinationName = "test";
                client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e){
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:"+responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
           window.alert("onMessageArrived:"+message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>

関連記事

© 株式会社Keigan