- 1. 概要
- 2. インストール
- 3. 自己疎通
- 4. 複数のトピックを待ち受ける
- 5. SSH
- 6. 参考サイト
1. 概要
稼働中の「node + express」に、「MQTT」の処理を組み込みたかったのです。
2. インストール
プロジェクトの管理者権限で、プロジェクトのドキュメントルートで。
npm install mqtt
3. 自己疎通
自装置内で、「mosquitto」を実行している状態で。
下記の「server.js」を記述します。
(シングルコーテーションとアポストロフィを間違えないように)
const express = require('express');
const mqtt = require('mqtt');
const app = express();
const port = 3000;
// MQTT ブローカーに接続
const client = mqtt.connect('mqtt://localhost');
client.on('connect', () => {
console.log('MQTT connected');
client.subscribe('my/topic', (err) => {
if (!err) console.log('Subscribed to my/topic');
});
});
// メッセージ受信
client.on('message', (topic, message) => {
console.log('Received message on ${topic}: ${message.toString()}');
});
app.listen(port, () => {
console.log('Express app listening at http://localhost:${port}/');
});
// Express ルートから MQTT 発行
app.get('/publish', (req, res) => {
const msg = req.query.msg || 'Hello MQTT';
client.publish('my/topic', msg);
res.send('Published message: ${msg}');
});
コンソールから。
node server.js
すると、コンソールに下記が表示されます。
Express app listening at http://localhost:3000/
MQTT connected
Subscribed to my/topic
ブラウザから下記の「URL」にアクセスすると。
http://hogehoge_server:3000/publish?msg=Hello
ブラウザに下記が表示され。
コンソール上に下記が表示されます。
Received message on my/topic: Hello
4. 複数のトピックを待ち受ける
前項で、複数のトピックを待ち受けるには。
const topics = ['topic/one', 'topic/two', 'topic/three'];
client.subscribe(topics, (err, granted) => {
if (err) {
console.error('Subscribe error:', err);
} else {
console.log('Subscribed to topics:', granted.map(g => g.topic).join(', '));
}
});
と書けば、「topic/one」「topic/two」「topic/three」を一度に待ち受けることができます。
下記ならば、「topic/」以下の単階層をすべて待ち受けます。
client.subscribe('topic/+', (err) => {
if (!err) console.log('Subscribed to topic/+');
});
下記ならば、「topic/」以下の全階層を待ち受けます。
client.subscribe('topic/#', (err) => {
if (!err) console.log('Subscribed to topic/#');
});
5. SSH
「mosquitto」が、「SSH」で証明書を必要とする場合。
クライアント鍵、クライアント「CSR」、認証局鍵がそれぞれ。
/path/to/client.key
/path/to/client.crt
/path/to/ca.crt
に置いてあって、パーミッションを適切に設定していれば、接続時に。
const fs = require('fs');
const mqtt = require('mqtt');
const client = mqtt.connect('mqtts://localhost:8883', {
key: fs.readFileSync('/path/to/client.key'),
cert: fs.readFileSync('/path/to/client.crt'),
ca: fs.readFileSync('/path/to/ca.crt'),
});
と記述することで、うまく接続できます。
6. 参考サイト
本ページは、「ChatGPT」軍曹を参考にさせていただきました。
|