npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

modbus-mqtt

v2.0.0

Published

This module bridges Modbus and MQTT in both directions. It publishes Modbus read/write results to MQTT and accepts MQTT commands that write to Modbus devices.

Readme

Modbus-Mqtt

This module bridges Modbus and MQTT in both directions. It publishes Modbus read/write results to MQTT and accepts MQTT commands that write to Modbus devices.

JavaScript Style Guide

Supported Modbus Functions

Modbus-to-MQTT topic structure

modbus-iot/{modbusId}/{functionName}

Example; modbus-iot/12/readInputRegisters

MQTT-to-Modbus write commands

Publish a JSON command to the following topic:

modbus-iot/{modbusId}/command/{functionName}

Supported write functions are writeCoil, writeRegister, writeCoils, and writeRegisters. The payload must contain an integer addr (or address) and value (or values).

# Write one coil
mosquitto_pub -t modbus-iot/1/command/writeCoil -m '{"addr":0,"value":true}'

# Write one holding register
mosquitto_pub -t modbus-iot/1/command/writeRegister -m '{"addr":10,"value":123}'

# Write multiple holding registers
mosquitto_pub -t modbus-iot/1/command/writeRegisters -m '{"addr":20,"values":[10,20,30]}'

Each command publishes a result to modbus-iot/{modbusId}/command/{functionName}/result. Successful commands include addr and value; failures also include err. Modbus write results are additionally published to the existing modbus-iot/{modbusId}/{functionName} topic.

Tests

npm test starts local in-memory MQTT and Modbus TCP devices to verify both directions:

  • Modbus holding-register read → MQTT message
  • MQTT writeRegister command → Modbus holding-register update

Example

Modbus to MQTT

const ModbusMqtt = require('./index')

const options = {
  mqttOptions: {
    brokerUrl: 'mqtt://broker.mqttdashboard.com'
  },
  modbusOptions: {
    type: 'TCP',
    tcp: {
      ip: '127.0.0.1',
      port: 802
    },
    id: 1
  }
}

const modbusMqtt = new ModbusMqtt(options)

modbusMqtt.on('modbus-connect', () => {
  setInterval(() => {
    modbusMqtt.modbusClient.readInputRegisters(0, 10, (err, response) => {
      if (err) return console.log('Err ', err.message)
      console.log('READ INPUT REGISTERS ', response)
    })
  }, 1000)

  setInterval(() => {
    modbusMqtt.modbusClient.readInputRegisters(20, 10)
  }, 2000)
})

MQTT to Modbus

With the bridge running, use any MQTT client to publish a command. This Node.js example writes holding register 10 with the value 123 and prints the result:

const mqtt = require('mqtt')

const client = mqtt.connect('mqtt://broker.mqttdashboard.com')
const commandTopic = 'modbus-iot/1/command/writeRegister'
const resultTopic = `${commandTopic}/result`

client.on('connect', () => {
  client.subscribe(resultTopic, err => {
    if (err) throw err
    client.publish(commandTopic, JSON.stringify({ addr: 10, value: 123 }))
  })
})

client.on('message', (topic, message) => {
  if (topic !== resultTopic) return

  console.log('Modbus write result:', JSON.parse(message.toString()))
  client.end()
})

Output:

{"addr":10,"value":123}

The bridge also publishes the Modbus write response to modbus-iot/1/writeRegister.

image