1.2.20 • Published 10 months ago

mqtt-vue-hook v1.2.20

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

Mqtt-Vue-Hook

NPM version NPM download count languages license codacy

Mqtt-vue-hook is a TypeScript library that makes it easy to connect to an MQTT broker (supports v5) and manages callback functions for various topics.

It can be used with Vue, Vite, React, and other frameworks based on Typescript. This efficient and effective tool streamlines MQTT-related logic, making it valuable for IoT applications and other MQTT-based scenarios.

Example

A LIGHT vue3 starter support MQTT

Install

npm install mqtt-vue-hook --save
yarn add mqtt-vue-hook -D

Usage

Vue or React or Typescript instance

// src/app.tsx
// protocol = 'wss', 'ws', 'mqtt', ...
// host = ip or domain
// port = 8083, 1883, ...
import { useMQTT } from 'mqtt-vue-hook'
const mqttHook = useMQTT()

mqttHook.connect(`${protocol}://${host}:${port}`, {
    clean: false,
    keepalive: 60,
    clientId: `mqtt_client_${Math.random().toString(16).substring(2, 10)}`,
    connectTimeout: 4000,
})

options: https://github.com/mqttjs/MQTT.js#client

Subscribe

<script setup lang="ts">
import { useMQTT } from 'mqtt-vue-hook'

onMounted(() => {
    const mqttHook = useMQTT()
    // mqttHook.subscribe([...topic], qos, opts?, callback?, clientID?)
    // mqttHook.unSubscribe(topic, opts?, callback?, clientID?)
    // '+' == /.+/
    // '#' == /[A-Za-z0-9/]/
    mqttHook.subscribe(
        ['+/root/#'],
        1,
        {
            properties: {
                userProperties: {...}
            },
        },
        () => {
            console.log('subscribed!')
        }
    )
})
</script>

options: https://github.com/mqttjs/MQTT.js#subscribe

Publish

<script setup lang="ts">
import { useMQTT } from 'mqtt-vue-hook'

onMounted(() => {
    const mqttHook = useMQTT()
    // mqttHook.publish(topic, message, qos?, opts?, callback?, clientID?)
    mqttHook.publish(
        ['test/root/1'],
        'my message',
        1,
        {},
        () => {
            console.log('published!')
        }
    )
})
</script>

options: https://github.com/mqttjs/MQTT.js#publish

Register Event

<script setup lang="ts">
import { useMQTT } from 'mqtt-vue-hook'

const mqttHook = useMQTT()

onMounted(() => {
    // mqttHook.registerEvent(topic, callback function, vm = string, clientID?)
    // mqttHook.unRegisterEvent(topic, vm)
    mqttHook.registerEvent(
        '+/root/#',
        (topic: string, message: string) => {
            Notification({
                title: topic,
                message: message.toString(),
                type: 'info',
            })
        },
        'string_key',
    )
    mqttHook.registerEvent(
        'on-connect', // mqtt status: on-connect, on-reconnect, on-disconnect, on-connect-fail
        (topic: string, message: string) => {
            console.log('mqtt connected')
        },
        'string_key',
    )
})

onUnmounted(() => {
    // mqttHook.unRegisterEvent(topic, vm, clientID?))
    mqttHook.unRegisterEvent('+/root/#', 'string_key')
    mqttHook.unRegisterEvent('on-connect', 'string_key')
})
</script>

Typescript

import { useMQTT } from 'mqtt-vue-hook'
const mqttHook = useMQTT()

mqttHook.registerEvent('+/root/1', (topic: string, message: string) => {
    console.log(topic, message.toString())
})
mqttHook.publish(['test/root/1'], 'my message', 1)

// console log "test/root/1 my message"

Multi-Client

import { useMQTT } from 'mqtt-vue-hook'
const mqttHook = useMQTT()

if (!mqttHook.isConnected(
    'mqtt-client-2' // // clientID
)) {
    mqttHook.connect(
        `${mqttProtocol}://${mqttHost}:${mqttPort}`,
        {
            clean: false,
            keepalive: 60,
            clientId: `mqtt_client_2_${Math.random().toString(16).substring(2, 10)}`,
            path: '/mqtt',
            connectTimeout: 4000,
        },
        'mqtt-client-2', // clientID
    )

    mqttHook.subscribe(
        ['test/root/1'],
        1,
        null,
        null,
        'mqtt-client-2' // // clientID
    )

    mqttHook.registerEvent(
        'test/root/1',
        (_topic: string, message: string) => {
            // callback
        },
        'string_key',
        'mqtt-client-2', // clientID
    )
}
1.2.19

11 months ago

1.2.20

10 months ago

1.2.18

1 year ago

1.2.17

1 year ago

1.2.16

2 years ago

1.2.14

2 years ago

1.2.15

2 years ago

1.2.8

2 years ago

1.2.7

2 years ago

1.2.6

2 years ago

1.2.5

2 years ago

1.2.4

2 years ago

1.2.9

2 years ago

1.2.12

2 years ago

1.2.13

2 years ago

1.2.10

2 years ago

1.2.11

2 years ago

1.2.3

2 years ago

1.2.2

2 years ago

1.2.1

2 years ago

1.2.0

2 years ago

1.1.14

2 years ago

1.1.12

2 years ago

1.1.11

2 years ago

1.1.10

2 years ago

1.1.9

2 years ago

1.1.8

2 years ago

1.1.7

2 years ago

1.1.6

2 years ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.18

2 years ago

1.0.17

2 years ago

1.0.16

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.13

2 years ago

1.0.12

2 years ago

1.0.11

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago