MQTT API マニュアル(Ver1.04)
MQTT API マニュアル 情報
ALIファームウェア バージョン:
ver. 1.04
著者: Keigan
MQTT API 共通
基本
MQTT
の仕組みにより、Topic
を subscribe
(購読)することにより、⾃動的にデータが publish
(発⾏)される。ステータスの取得 により、⾃機の状態を把握することができる。
アドレス
MQTT API
にアクセスするためのアドレスは以下となる。
MQTTプロトコルで接続 | mqtt://[IP Address]:9075/[Topic] |
---|---|
WebSocketプロトコル経由で接続 (ブラウザ等で使用時) | ws://[IP Address]:9076/[Topic] |
[IP Address]
直接
AMR
のアクセスポイントに接続する場合・・・10.0.60.1
ローカルエリアネットワーク
LAN
経由で接続する場合・・・192.XXX.X.XX
LAN
経由の場合は、ルーター側でIPアドレス
を割り当て、または固定設定を行うことにより、決定される。
[Topic]
次項 MQTT API
リスト で定義される Topic
(トピック)を使⽤する。
MQTT API リスト
No. | Function | Direction | Topic |
---|---|---|---|
QS-1 | マシンのステータスを取得する | Publish | status |
QS-1 ステータスの取得
Topic | Function | Direction |
---|---|---|
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_state | AMRの状態 | Idle:アイドル中 Executing:タスクセットの実行中 Mapping:マップの作成中 Error:エラー |
battery | バッテリー状態 | Percentage:残量 [%] Voltage:電圧 [V] |
time stamp | 発行された時刻(UNIX_TIME) | |
location | AMRの現在位置 (選択されているマップの 原点座標を基準とする 位置座標と向き | x:現在位置のx座標 y:現在位置のy座標 json
|
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>