Expand description
Компонент MQTT-клиента для публикации и получения сообщений с брокера.
§Примеры
§Только публикация данных
use rsiot::{components::cmp_mqtt_client::*, executor::Component, serde_utils::SerdeAlgKind};
use crate::message::Custom;
pub fn cmp() -> Component<Config<Custom>, Custom> {
let config = Config {
serde_alg: SerdeAlgKind::Json,
client_id: "pubish".into(),
host: "localhost".into(),
port: 1883,
client_capacity: 100,
publish: ConfigPublish::Publish {
fn_publish: |msg, mqtt_msg_gen| {
let mqtt_msg = match msg {
Custom::Counter(v) => mqtt_msg_gen.ser("example/counter", true, v)?,
};
Ok(Some(mqtt_msg))
},
},
subscribe: ConfigSubscribe::NoSubscribe,
};
Cmp::new(config)
}
§Только получение данных
use rsiot::{
components::cmp_mqtt_client::*, executor::Component, message::Message,
serde_utils::SerdeAlgKind,
};
use crate::message::Custom;
pub fn cmp() -> Component<Config<Custom>, Custom> {
let config = Config {
client_id: "subscribe".into(),
host: "localhost".into(),
port: 1883,
serde_alg: SerdeAlgKind::Json,
client_capacity: 100,
publish: ConfigPublish::NoPublish,
subscribe: ConfigSubscribe::Subscribe {
token: "example/#".into(),
fn_subscribe: |mqtt_msg, mqtt_msg_gen| {
let msg = match mqtt_msg.topic.as_str() {
"example/counter" => {
let v: i32 = mqtt_msg_gen.de(&mqtt_msg.payload)?;
Message::new_custom(Custom::Counter(v))
}
_ => return Ok(None),
};
Ok(Some(vec![msg]))
},
},
};
Cmp::new(config)
}
Re-exports§
pub use config::Config;
pub use config::ConfigPublish;
pub use config::ConfigSubscribe;
Enums§
Type Aliases§
- Cmp
- Компонент cmp_mqtt_client