/bambulab

WIP: API client crate for Bambu Lab printers

Primary LanguageRustApache License 2.0Apache-2.0

Bambulab API

Docs GitHub workflow status Crates.io Version Crates.io Downloads License

🚧 WORK IN PROGRESS 🚧

This crate is still in development and not ready for production use. Breaking changes may occur at any time.

bambulab is a async Rust crate that provides a channel based client for interacting with Bambu Lab devices over their MQTT broker.

Features

  • Subscribe to printer messages like print progress, temperatures, errors, etc.
  • Publish commands to the printer
  • Support for P1P, P1S and X1C printer

Usage

First, add bambulab to your dependencies:

cargo add bambulab

Then, use the Client struct to create a new client and connect to a printer:

use bambulab::{client::Client, command::Command};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let host = "printer-ip-or-hostname";
    let access_code = "printer-access-code";
    let serial = "printer-serial-number";

    let (tx, mut rx) = tokio::sync::broadcast::channel::<Message>(25);

    let mut client = Client::new(host, access_code, serial, tx);

    tokio::try_join!(
        tokio::spawn(async move {
            client.run().await.unwrap();
        }),
        tokio::spawn(async move {
            loop {
                let message = rx.recv().await.unwrap();
                println!("received: {message:?}");
            }
        })
    )?;

    Ok(())
}

Please note that you need to call subscribe() to allow the API to listen to messages.

More examples available in the examples directory.

FAQ

How do I find the access code?

You can find the access code in the printer settings under "WLAN" -> "Access Code".

How do I find the serial number?

The serial can be found in the printer settings under "SN".

Contributing

See the contributing guidelines for more information.

License

This code is licensed under either of

at your option.

Disclaimer

This project is not officially associated with Bambu Lab. It is a third-party implementation.