npm i mqtt
로 먼저 라이브러리를 다운 받아줍니다.
그 다음
app.module.ts
@Module({
MqttModule.forRoot({
servers: [
{
host: process.env.MQTT_HOST, // 현재 통신하고 있는 MQTT 브로커 호스트
port: parseInt(process.env.MQTT_PORT_M), //대부분의 브로커는 1883 또는 1884를 사용함.
},
],
clientId: process.env.MQTT_CLIENT_ID, // 하고 싶은 암호같은 이름? 예를 들어 "nestjs-microservice"
username: process.env.MQTT_USER_NAME, // 설정한 브로커 ID
password: process.env.MQTT_PASSWORD, // 설정한 브로커 PW
protocol: 'mqtt',
rejectUnauthorized: false,
}),
],
...
})
이렇게 연결이 완료되면, mqtt를 사용하고 싶은 파일에 초기화를 진행해줘야하는데,
Module에서 MQTT 브로커에 연결을 해 주었는데 왜 또 초기화를 진행하나요?
라고 생각하실 수 있습니다.
왜냐하면 MQTT 브로커에 연결을 진행하였더라도 아직 해당 MQTT 브로커와의 통신에 관한 정의를 해주지 않았기 때문입니다. 그렇기 때문에 사용하고 싶은 파일에 OnModuleInit을 implements 해줄 겁니다.
import { CreateManualDto } from './dto/create-manual.dto';
import { Injectable, OnModuleInit } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { ManualRepository } from './manual.repository';
import { Manual_Entity } from './manual.entity';
import { MqttClient, connect } from 'mqtt';
@Injectable()
export class ManualService implements OnModuleInit {
private client: MqttClient;
constructor(
@InjectRepository(ManualRepository)
private manualRepository: ManualRepository,
) {}
async onModuleInit() { //해당 MQTT 브로커 초기화
this.client = connect(`mqtt://${process.env.MQTT_HOST}:${process.env.MQTT_PORT}`, { //MQTT 브로커 연결 한번 더
clientId: process.env.MQTT_CLIENT_ID,
username: process.env.MQTT_USER_NAME,
password: process.env.MQTT_PASSWORD,
protocol: 'mqtt',
rejectUnauthorized: false,
});
console.log(this.client);
this.client.on('connect', () => { // 브로커에 대한 연결이 성공하면 알려줌.
this.client.subscribe('MQTT SERVER', (err) => {
if (err) {
console.log(`error subscribing to MQTT SERVER`, err);
} else {
console.log(`successfully subscribed to MQTT SERVER`);
}
})
});
this.client.on('message', async (topic, message) => { // 라즈베리 파이에서 온 MQTT 브로커 통신을 이렇게 받음.
console.log(`Received a message on topic "${topic}": ${message.toString()}`);
this.client.publish(`/보낼려하는 주소`, '{"보낼 key" : "보낼 value"}',{qos : 1});
}
}
이런 식으로 구독을 하고 받을 때는 this.client.on
보낼 때는 this.client.publish
'it > nestjs' 카테고리의 다른 글
Next.js( react-slick ) (1) | 2023.03.23 |
---|---|
JWT 순서 (3) | 2023.02.16 |
JWT Token (0) | 2023.02.02 |
typescript로 날씨 api 가져오기 (0) | 2023.01.19 |
Nest.js 구글 로그인(1) (1) | 2023.01.11 |
댓글