awtrix3

Crates.ioawtrix3
lib.rsawtrix3
version0.0.2
sourcesrc
created_at2024-10-16 16:38:13.790354
updated_at2024-10-16 20:52:40.541097
descriptionAwtrix3 types and API (mqtt/http), from https://blueforcer.github.io/awtrix3/#/api
homepage
repositoryhttps://dev.solidev.net/solidev/awtrix3.git
max_upload_size
id1412002
size48,777
Jean-Matthieu BARBIER (jmbarbier)

documentation

README

Types and async api for the Awtrix3 device.

From https://blueforcer.github.io/awtrix3/#/api

This crate is a WIP poorly documented and untested !!! Use at your own risk, kwnowing that it will change / break in the future.

The main types are:

  • [Awtrix3HttpClient] for http communication
  • [Awtrix3MqttClient] for mqtt communication
  • [Topic] and [Message] for in/out communication

Example

use awtrix3::*;

#[tokio::main]
async fn main() {
    // Http usage
    let client = Awtrix3HttpClient::new("xxx.xxx.xxx.xxx", 80)
        .with_credentials("user", "password");
    let stats = Topic::Stats.http_get(&client).await.unwrap();
    println!("{:?}", stats);

    // Send message
    Message::Settings(Settings {
        scroll_speed: Some(10),
        ..Default::default()
    })
    .http_send(&client)
    .await
    .unwrap();
    println!("Message sent via http");

    // Mqtt usage
    let (client, mut eventloop) = Awtrix3MqttClient::new(
        Awtrix3MqttClientOptions {
            client_id: "awtrix3".to_string(),
            host: "localhost".to_string(),
            port: 1883,
            username: Some("user".to_string()),
            password: Some("password".to_string()),
        },
        10,
        "clock",
    )
    .unwrap();

    // Listen for messages and decode the messages and topics received.
    tokio::task::spawn(async move {
        while let Ok(msg) = eventloop.poll().await {
            println!("Message {:?}", msg);
            if let Ok(Some((topic, message))) = eventloop.decode(msg) {
                println!("{:?} {:?}", topic, message);
            }
        }
    });

    // Subscribe to a topic
    client.subscribe("/stats").await.unwrap();
    println!("Subscribed to /stats");
    // Send messages
    Message::MoodLightOn(Mood {
        brightness: Some(120),
        color: Some(Color::Rgb(255, 0, 0)),
        kelvin: None,
    })
    .mqtt_send(&client)
    .await
    .unwrap();
    println!("Message sent via mqtt");

    // Wait for a while
    println!("Waiting for 60 seconds");
    tokio::time::sleep(std::time::Duration::from_secs(60)).await;
}

}
Commit count: 0

cargo fmt