Files
rust_device/src/mqtt_pub.rs
2024-02-17 23:25:21 +01:00

48 lines
1.4 KiB
Rust

use std::{
env,
time::Duration
};
use rumqttc::{Client, Connection, MqttOptions, QoS};
pub fn init_cli() -> (Client, Connection) {
let mut mqttoptions = MqttOptions::new("test-1", env::var("BROKER_ADDRESS").unwrap().to_string(), 1883);
mqttoptions.set_keep_alive(Duration::from_secs(1));
let (client, connection) = Client::new(mqttoptions, 10);
(client, connection)
}
pub fn publish_message(mut client: Client, topic: &str, payload: String) -> Client {
client.publish(get_topic_name(topic), QoS::AtLeastOnce, true, payload).unwrap();
client
}
pub fn disconnect(mut connection: Connection, count: usize) {
// Disconnect from the broker.
for (i, notification) in connection.iter().enumerate() {
match notification {
Ok(notif) => {
println!("{i}. Notification = {notif:?}");
if i > count {
return;
}
}
Err(error) => {
println!("{i}. Notification ERROR = {error:?}");
return;
}
}
}
}
pub fn get_topic_name(types: &str) -> String {
let mut topic = env::var("SERVICE").unwrap().to_string();
topic.push('/');
let capteur = env::var("CAPTEUR").unwrap().to_string();
topic.push_str(&capteur);
topic.push('/');
topic.push_str(&types);
return topic;
}