🚧 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.
- Subscribe to printer messages like print progress, temperatures, errors, etc.
- Publish commands to the printer
- Support for P1P, P1S and X1C printer
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);
let mut client_clone = client.clone();
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:?}");
if message == Message::Connected {
client_clone.publish(Command::PushAll).await.unwrap();
}
}
}),
)?;
Ok(())
}
Please note that you need to call subscribe() to allow the API to listen to messages.
More examples available in the examples directory.
You can find the access code in the printer settings under "WLAN" -> "Access Code".
The serial can be found in the printer settings under "SN".
See the contributing guidelines for more information.
This code is licensed under either of
at your option.
This project is not officially associated with Bambu Lab. It is a third-party implementation.