Skip to content

Digital-Alchemy-TS/mqtt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a0f8322 Β· Mar 3, 2025

History

24 Commits
Mar 3, 2025
Mar 26, 2024
Nov 16, 2024
Mar 10, 2024
Jul 20, 2024
Mar 10, 2024
Sep 25, 2024
Jul 20, 2024
Mar 10, 2024
Aug 22, 2024
Mar 10, 2024
Nov 16, 2024
Jan 13, 2025
Nov 16, 2024
Jan 13, 2025

Repository files navigation

πŸ“š Description

Welcome to @digital-alchemy/mqtt-extension!

πŸ’Ύ Install

This library can be installed as a simple dependency

npm i @digital-alchemy/mqtt-extension

Then added to your project

import { LIB_MQTT } from "@digital-alchemy/mqtt-extension";

// application
const MY_APP = CreateApplication({
  libraries: [LIB_MQTT],
  name: "home_automation",
})

// library
export const MY_LIBRARY = CreateLibrary({
  depends: [LIB_MQTT],
  name: "special_logic",
})

βš™οΈ Configuration

CLIENT_OPTIONS gets passed straight to mqtt library.

See mqtt code for all available options.

Add the following to your application's configuration file.

[mqtt.CLIENT_OPTIONS]
  host=localhost
  username=me
  password=super-strong-password
  port=1883

or as json in your .env

CLIENT_OPTIONS={"host":"localhost","port":1883}

πŸ›  Usage

Library is in an "experimental" state

More useful services will be added in the future

πŸ”„ Bindings

The bindings file is an "everything in one file". It handles

  • Connection at onPostConfig
  • logging standard events (error messages, reconnect events, etc)

βž• subscribe

The subscribe method will automatically listen to topics for you, and pass through messages to your provided callback. You can use wildcards in your topics:

  • + - single level (device/+/turned_off)
  • # - multi level wildcard (device/thingie/#)
import { TServiceParams } from "@digital-alchemy/core";

type YourMessage = {}
export function Example({ logger, mqtt, context }: TServiceParams) {
  mqtt.bindings.subscribe({
    context,
    exec(message:YourMessage) {
      logger.info("my topic was sent!")
    },
    topic: "my/topic",
  });
}

πŸ“€ publish

Simple wrapper for the publish method on the mqtt client.

import { TServiceParams } from "@digital-alchemy/core";

type YourMessage = {}
export function Example({ logger, mqtt, lifecycle }: TServiceParams) {

  lifecycle.onReady(() => {
    mqtt.bindings.publish("my/topic")
    mqtt.bindings.publish("my/topic",{
	    extra_payload_data: {},
	    foo: "bar"
	})
  })
}

πŸ” getClient

Need something more complicated? Retrieve the already configured mqtt instance

import { TServiceParams } from "@digital-alchemy/core";

type YourMessage = {}
export function Example({ mqtt, lifecycle }: TServiceParams) {

  lifecycle.onBootstrap(() => {
    const client = mqtt.bindings.getClient();

  })
}