@tidaly/mqtt
is a mqtt client based on Async-Mqtt
for AdonisJS.
Note
You must have a Mqtt broker running to use this package. If you don't have one, you can use EMQX.
This package is available in the npm registry.
npm install @tidaly/mqtt
Next, configure the package by running the following command.
node ace configure @tidaly/mqtt
To subscribe to a topic you can simply add the topic to the topics
array in the config/mqtt.ts
file.
subscriber: {
topics: ["my/topic"],
},
Or you can use the subscribe
method.
import { MqttClient } from "@ioc:Tidaly/Mqtt";
await MqttClient.subscribe('my/topic');
// or subscribe to multiple topics
await MqttClient.subscribe(['my/topic', 'my/other-topic']);
Then, when a message is received the mqtt:message
event will be emitted.
Create a event listener to handle the message.
import Event from '@ioc:Adonis/Core/Event';
import Logger from '@ioc:Adonis/Core/Logger';
Event.on('mqtt:message', (topic: string, message: string) => {
Logger.info(`Message received on topic ${topic}: ${message}`);
});
To publish to a topic you can use the publish
method.
import { MqttClient } from "@ioc:Tidaly/Mqtt";
class MyController {
public async publish({ request }: HttpContextContract) {
const { topic, message } = request.only(['topic', 'message']);
await MqttClient.publish(topic, message);
}
}
To subscribe to a topic you can use the mqtt:sub
command.
The command will subscribe to all topics in the topics
array in the config/mqtt.ts
file.
node ace mqtt:sub
Messages will be logged to the console.
To publish to a topic you can use the mqtt:pub
command and pass the topic and message as arguments.
node ace mqtt:pub my/topic "Hello World"