From 0a7edc50e860cb9fd4cae662270d6718f296a6ea Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Thu, 7 Sep 2023 00:55:25 +0200 Subject: [PATCH] Seperated mqtt messages into seperate topics and made topic configurable --- Cargo.lock | 21 +++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 24 +++++++++++++++--------- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 314112d..584f0d8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -265,6 +265,26 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +[[package]] +name = "const_format" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "cortex-m" version = "0.7.7" @@ -1710,6 +1730,7 @@ name = "rp" version = "0.1.0" dependencies = [ "cfg-if", + "const_format", "cortex-m", "cortex-m-rt", "crc16", diff --git a/Cargo.toml b/Cargo.toml index 290ff9c..1e3526a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -82,6 +82,7 @@ smoltcp = { version = "0.10.0", default-features = false, features = [ nourl = { version = "0.1.1", features = ["defmt"] } reqwless = { version = "0.5.0", features = ["defmt"] } embedded-storage = "0.3.0" +const_format = "0.2.31" [patch.crates-io] embassy-executor = { git = "https://github.com/embassy-rs/embassy" } diff --git a/src/main.rs b/src/main.rs index 6c73730..5dac087 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,6 +52,7 @@ use rust_mqtt::{ use serde::Deserialize; use static_cell::make_static; +use const_format::formatcp; use defmt::{debug, error, info, warn, Debug2Format, Format}; use {defmt_rtt as _, panic_probe as _}; @@ -61,6 +62,11 @@ bind_interrupts!(struct Irqs { PIO0_IRQ_0 => pio::InterruptHandler; }); +const ID: &str = env!("ID"); +const TOPIC_BASE: &str = formatcp!("pico/{}", ID); +const TOPIC_STATUS: &str = formatcp!("{}/status", TOPIC_BASE); +const TOPIC_UPDATE: &str = formatcp!("{}/update", TOPIC_BASE); + #[derive(Format, Deserialize)] struct UpdateMessage<'a> { url: &'a str, @@ -281,9 +287,9 @@ async fn main(spawner: Spawner) { config.add_username(env!("MQTT_USERNAME")); config.add_password(env!("MQTT_PASSWORD")); config.add_max_subscribe_qos(QualityOfService::QoS1); - config.add_client_id("pico"); + config.add_client_id(ID); // Leads to InsufficientBufferSize error - config.add_will("pico/test", b"disconnected", true); + config.add_will(TOPIC_STATUS, b"disconnected", true); let mut recv_buffer = [0; 1024]; let mut write_buffer = [0; 4096]; @@ -308,11 +314,11 @@ async fn main(spawner: Spawner) { updater.mark_booted().unwrap(); client - .send_message("pico/test", b"connected", QualityOfService::QoS1, true) + .send_message(TOPIC_STATUS, b"connected", QualityOfService::QoS1, true) .await .unwrap(); - client.subscribe_to_topic("pico/test/update").await.unwrap(); + client.subscribe_to_topic(TOPIC_UPDATE).await.unwrap(); // Turn LED off when connected control.gpio_set(0, false).await; @@ -337,7 +343,7 @@ async fn main(spawner: Spawner) { .expect("The buffer should be large enough to contain all the data"); client - .send_message("pico/test", &msg, QualityOfService::QoS1, false) + .send_message(TOPIC_BASE, &msg, QualityOfService::QoS1, false) .await .unwrap(); } @@ -419,7 +425,7 @@ where debug!("Preparing updater..."); client - .send_message("pico/test", b"preparing", QualityOfService::QoS1, false) + .send_message(TOPIC_STATUS, b"preparing", QualityOfService::QoS1, false) .await .unwrap(); @@ -430,7 +436,7 @@ where debug!("Updater prepared!"); client - .send_message("pico/test", b"prepared", QualityOfService::QoS1, false) + .send_message(TOPIC_STATUS, b"prepared", QualityOfService::QoS1, false) .await .unwrap(); @@ -445,7 +451,7 @@ where offset += read as u32; } client - .send_message("pico/test", b"written", QualityOfService::QoS1, false) + .send_message(TOPIC_STATUS, b"written", QualityOfService::QoS1, false) .await .unwrap(); debug!("Total size: {}", offset); @@ -453,7 +459,7 @@ where updater.mark_updated().unwrap(); client - .send_message("pico/test", b"restarting", QualityOfService::QoS1, false) + .send_message(TOPIC_STATUS, b"restarting", QualityOfService::QoS1, false) .await .unwrap();