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 🙏

© 2024 – Pkg Stats / Ryan Hefner

bambu-node

v3.22.21

Published

A node.js library for connecting to and receiving data from Bambu Lab printers through their MQTT servers.

Downloads

57

Readme

Bambu Node

[!CAUTION]
🚧 This library is still in the making. PRs and other feature requests are welcome.

A node.js library for connecting to and receiving data from Bambu Lab printers through their MQTT servers.

  • Every command & response field is documented & typed.
  • Easily (and safely*) construct commands & manage responses.
  • Full async support! client#executeCommand waits until the command completion is verified by the printer.

Getting Started

Prerequisites

Make sure you have the following installed:

  • Node.js
  • NPM
  • TypeScript

[!CAUTION]
TypeScript is highly recommended for this package due to the type safety it provides. This is especially important in use cases like this project where the library communicates with external hardware which can very well come with property damage. And even with TypeScript, I am not liable for any such damages as stated in the license.

Installation

npm install bambu-node

Example Usage

import { BambuClient, Fan, UpdateFanCommand } from "bambu-node"

// define a printer connection
const client = new BambuClient({
	host: "your_printers_ip",
	accessToken: "your_printers_access_token",
	serialNumber: "your_printers_sn",
})

// more about the available events below
client.on("message", (topic, key, data) => {
	console.log(`New ${key} message!`, data)
})

client.on("printer:statusUpdate", (oldStatus, newStatus) => {
	console.log(`The printer's status has changed from ${oldStatus} to ${newStatus}!`)
})

// connect to the printer
await client.connect()

// update the speed of the auxiliary fan to 100%
await client.executeCommand(new UpdateFanCommand({ fan: Fan.AUXILIARY_FAN, speed: 100 }))

// we don't want to do anything else => we close the connection
// (can be kept open indefinitely if needed)
await client.disconnect()

API

Legend

Unnamed things inside classes: Other classes that extend that class.

Every method, command and response is documented in JSDoc, so only events & utility classes are documented here.

Class: BambuClient

Responsible for managing the connection and messages to/from the printer.

Events

rawMessage

Triggered whenever a new message is received from the MQTT broker.

message

Triggered whenever a new known message is received from the MQTT broker. It's already parsed and sent using its type.

client:connect

Triggered whenever the client connects to the printer. This will also trigger on a reconnect.

client:disconnect

Triggered whenever the client disconnects from the printer. This can be on purpose using the client#disconnect method or when the printer itself goes offline.

client:error

Triggered whenever the internal MQTT client encounters an error.

Examples include:

  • Unresolvable host provided
  • Incorrect credentials provided
  • Unexpected responses

printer:dataUpdate

Triggered whenever new data is received from the printer and is merged into the data class field.

printer:statusUpdate

Triggered whenever the printer's status changes to a new status.

job:update

Triggered whenever the current Job's data gets updated.

job:start

Triggered whenever a new printing job starts.

job:pause

Triggered whenever the current print job is paused.

job:offlineRecovery

Triggered whenever the current print job was recovered after the printer came back online from an offline state.

job:unpause

Triggered whenever the current print job is resumed.

job:finish

Triggered whenever the current print job finishes.

Possible reasons:

  • SUCCESS: Triggered whenever the current print job finishes without errors.
  • FAILED: Triggered whenever the current print job finishes without errors.
  • UNEXPECTED: Triggered whenever the current print job finishes unexpectedly. This is only included as a proof of concept and is 99% bound to never happen.

Class: Job

Responsible for managing the data about the current print job. It collects historical data, error codes, etc. It is included in every event starting with job:.

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

License

MIT © Márk Böszörményi, Aaron Scherer