# egg-cute-mqtt

> MQTT plugin for egg

Latest version **1.11.0** (published 2024-06-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install egg-cute-mqtt
pnpm add egg-cute-mqtt
yarn add egg-cute-mqtt
bun add egg-cute-mqtt
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.11.0 |
| Published | 2024-06-26 |
| First published | 2022-10-26 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=8.0.0 |
| Dependencies | 2 |
| Unpacked size | 21.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | wadezha |
| Keywords | egg, eggPlugin, egg-plugin, egg-mqtt, cute-mqtt, mqtt |

## Links

- npm: https://www.npmjs.com/package/egg-cute-mqtt
- Repository: https://github.com/wadezha/egg-cute-mqtt
- Homepage: https://github.com/wadezha/egg-cute-mqtt#readme
- Issues: https://github.com/wadezha/egg-cute-mqtt/issues
- npm.io page: https://npm.io/package/egg-cute-mqtt

## Dependencies (2)

- [mqtt](https://npm.io/package/mqtt.md) ^4.3.7
- [pify](https://npm.io/package/pify.md) ^2.3.0

## Recent versions

- 1.11.0 (latest) — 2024-06-26
- 1.10.0 — 2024-06-24
- 1.9.0 — 2024-01-11
- 1.8.0 — 2024-01-11
- 1.7.0 — 2024-01-09
- 1.6.0 — 2024-01-05
- 1.5.0 — 2022-12-07
- 1.3.0 — 2022-12-06
- 1.2.0 — 2022-11-05
- 1.1.0 — 2022-10-27
- 1.0.0 — 2022-10-26

## README

# egg-cute-mqtt

Refer to [mqtt]

## Install

```bash
$ npm i egg-cute-mqtt --save
```

mqtt Plugin for egg, support egg application connect to mqtt.

## Configuration

Change `${app_root}/config/plugin.js` to enable mqtt plugin:

```js
exports.mqtt = {
  enable: true,
  package: 'egg-cute-mqtt',
};
```

Configure mqtt information in `${app_root}/config/config.default.js`:

### Simple mqtt instance

```js
exports.mqtt = {
  client: {
    host: 'mqtt://127.0.0.1',
    port: 1883,
    username: 'username',
    password: 'password',
    clientId: 'client_id',
    options: {
      keeplive: 60,
      reconnectPeriod: 1000,
      connectTimeout: 30 * 1000,
      protocolId: 'MQTT',
      protocolVersion: 4,
      clean: true,
      rejectUnauthorized: false,
      will: {
        topic: 'client_id',
        payload: 'offline',
        qos: 2,
        retain: true
      },
    },
    onlinePayload: 'online',
    topics: [],
    parserPath: '',
    chainPath: '',
    // subscribe middleware
    inChain: ['dispatcher'],
    // publish middleware
    outChain: ['encoder'],
  },
  // load into app, default is open
  app: true,
  // load into agent, default is close
  agent: false,
};

Note:
1. If multi-threading is enabled on the server
  - Topics recommends using shared subscription ($share/group_name/topic) 
  - iot-cute-mqtt will automatically add the thread ID after the clientId, for example, clientId: 'client_id_18331'

2. will.topic, will.payload, onlinePayload support ${clientId} replacement, for example onlinePayload: '${clientId}, online' will be replaced by 'client_id, online'

```

Usage:

```js  publish and subscribe

app.mqtt.channel.publish(topic, message, options);
app.mqtt.channel.subscribe(topic, options);


```

```js create class file on /app/mqtt/chain to handle message

import { Chain } from 'egg-cute-mqtt';

class Dispatcher extends Chain {
  constructor(ctx) {
    super(ctx);
  }

  async handle(topic, message) {
    try {
      this.ctx.logger.info('dispatcher, topic: %s, message: %s', topic, message);

      return await this.next(topic, message);
    } catch(ex) {
      this.ctx.logger.error(ex.message);
      return [topic, message];
    }
  }
}

module.exports = Dispatcher;

```

```js create class file on /app/mqtt/chain to handle publish


import { Chain } from 'egg-cute-mqtt';

class OutChain1 extends Chain {
  constructor(ctx) {
    super(ctx);
  }

  async handle(topic, message, options) {
    try {
      this.ctx.logger.info('OutChain1, topic: %s, message: %s, options: %s', topic, message, options);

      return await this.next(topic, message, options);
    } catch(ex) {
      this.ctx.logger.error(ex.message);
      return [topic, message, options];
    }
  }
}

module.exports = OutChain1;

```

```js create class file on /app/mqtt/parser to handle protocol


import { Parser } from 'egg-cute-mqtt';

class Cute extends Parser {
  constructor(ctx) {
    super(ctx);
  }

  async decode(hex) {
    return '';
  }
}

module.exports = Cute;

```
### Multiple mqtt instance

```js
exports.mqtt = {
  clients: {
    mqtt1: {
      host: 'mqtt://127.0.0.1',
      port: 1883,
      username: 'username',
      password: 'password',
      clientId: 'client_id',
      options: {
        keeplive: 60,
        reconnectPeriod: 1000,
        connectTimeout: 30 * 1000,
        protocolId: 'MQTT',
        protocolVersion: 4,
        clean: true,
        rejectUnauthorized: false,
        will: {
          topic: 'client_id',
          payload: 'offline',
          qos: 2,
          retain: true
        },
      },
      onlinePayload: 'online',
      topics: [],
      parserPath: 'mqtt/parser',
      chainPath: 'mqtt/chain',
      // subscribe middleware
      inChain: ['dispatcher'],
      // publish middleware
      outChain: ['outChain1'],
    },
    // ...
  },
  // load into app, default is open
  app: true,
  // load into agent, default is close
  agent: false,
};
```

Usage:

```js
const client1 = app.mqtt.get('mqtt1');
client1.channel.publish(topic, message, options);
client1.channel.subscribe(topic, options);
client1.parser.cute.decode(hex);

const client2 = app.mqtt.get('mqtt2');
client2.channel.publish(topic, message, options);
client2.channel.subscribe(topic, options);

```

## Questions & Suggestions

Please open an issue [here](https://github.com/eggjs/egg/issues).

## License

[MIT](LICENSE)

---
_Source: https://npm.io/package/egg-cute-mqtt · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
