Amazon LightsailをMosquittoでMQTTブローカーとして利用する
Amazon LightsailにOSSのMQTTブローカー、Mosquittoをインストールして使ってみます。
LightsailインスタンスはOSのみのUbuntu 18.04 LTSを使います。
インスタンスが立ちあがったらSSHログインしてMosquittoをインストールします。
SSHセッションを複数開いて動作確認します。
ローカルのクライアントから接続してみます。
まずは、リッスンポートを確認します。
ネットワーキングのファイアウォールで1883のインバウンドポートを解放します。
ローカル端末にクライアントをダウンロードします。
https://mosquitto.org/download/
Windowsならインストーラーの指示に従ってインストールして、インストールフォルダへのPATHを通せば使えるようになります。
インスタンスに割り当てられたパブリックIPを指定します。
まずはWebSocketを使えるように設定ファイルを編集してポートを解放します。
HTMLファイルを用意し、ブラウザコンソールでやり取りの結果が確認できます。
IoT機器から集信した情報をブラウザで確認するといった用途に使えそうです。
LightsailインスタンスはOSのみのUbuntu 18.04 LTSを使います。
インスタンスが立ちあがったらSSHログインしてMosquittoをインストールします。
sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get install mosquitto mosquitto-clients
# Subscriber側
$ mosquitto_sub -d -t topic1
Client mosq-7MfIECdvo8ZBiYdrrR sending CONNECT
Client mosq-7MfIECdvo8ZBiYdrrR received CONNACK (0)
Client mosq-7MfIECdvo8ZBiYdrrR sending SUBSCRIBE (Mid: 1, Topic: topic1, QoS: 0, Options: 0x00)
Client mosq-7MfIECdvo8ZBiYdrrR received SUBACKSubscribed (mid: 1): 0
Client mosq-7MfIECdvo8ZBiYdrrR received PUBLISH (d0, q0, r0, m0, 'topic1', ... (5 bytes))
hello
# Publisher側
$ mosquitto_pub -d -t topic1 -m "hello"
Client mosq-Ul4wJLBcCkTmTpSgfR sending CONNECT
Client mosq-Ul4wJLBcCkTmTpSgfR received CONNACK (0)
Client mosq-Ul4wJLBcCkTmTpSgfR sending PUBLISH (d0, q0, r0, m1, 'topic1', ... (5 bytes))
Client mosq-Ul4wJLBcCkTmTpSgfR sending DISCONNECT
まずは、リッスンポートを確認します。
$ mosquitto -v
1594645661: mosquitto version 1.6.10 starting
1594645661: Using default config.
1594645661: Opening ipv4 listen socket on port 1883.
1594645661: Error: Address already in use
https://mosquitto.org/download/
Windowsならインストーラーの指示に従ってインストールして、インストールフォルダへのPATHを通せば使えるようになります。
インスタンスに割り当てられたパブリックIPを指定します。
# Subscriber側
>mosquitto_sub -h [パブリックIP] -p 1883 -t topic1
hello
# Publisher側
>mosquitto_pub -h [パブリックIP] -p 1883 -d -t topic1 -m "hello"
Client mosq-V0acdvYAXSp49TEl9F sending CONNECT
Client mosq-V0acdvYAXSp49TEl9F received CONNACK (0)
Client mosq-V0acdvYAXSp49TEl9F sending PUBLISH (d0, q0, r0, m1, 'topic1', ... (5 bytes))
Client mosq-V0acdvYAXSp49TEl9F sending DISCONNECT
MQTT over WebSocketで接続
MosquittoはMQTT over WebSocketをサポートしているので、JavaScriptから接続してみます。まずはWebSocketを使えるように設定ファイルを編集してポートを解放します。
$ sudo vi /etc/mosquitto/mosquitto.conf
$ tail -7 /etc/mosquitto/mosquitto.conf
include_dir /etc/mosquitto/conf.d
listener 1883
listener 8080
protocol websockets
sudo service mosquitto restart
<html>
<head>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js" type="text/javascript"></script>
<script>
var host = "[パブリックIP]";
// MQTTクライアント
var client = new Paho.MQTT.Client(
host,
8080,
"/mqtt",
"clientId");
// 接続
client.connect({
onSuccess:onConnect, // 成功
onFailure:doFail // 失敗
});
function onConnect() {
console.log("onConnect");
client.subscribe("topic1"); // 購読
// 送信
message = new Paho.MQTT.Message("Hello Mosquitto");
message.destinationName = "topic2";
client.send(message);
}
function doFail(e){
console.log(e);
}
// コネクションの切断
client.onConnectionLost = function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:"+responseObject.errorMessage);
}
}
// メッセージの受信
client.onMessageArrived = function onMessageArrived(message) {
console.log("onMessageArrived:"+message.payloadString);
}
</script>
</body>
</html>
ディスカッション
コメント一覧
まだ、コメントがありません