我正在构建一个基于MQTT的Rust应用程序,该应用程序将消息发送到IoTHub,以便将其转发到监听云到设备消息的目标设备。
目标设备“myDev”已订阅主题devices/myDev/messages/devicebound/#
,它可以接收来自IoTHub界面的消息(Azure门户上的“消息到设备”)。
我发现可以使用其他编程语言实现此目的的示例使用Azure IoT SDK,该示例具有客户端服务。例如,参见Java示例:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-java-java-c2d#send-a-cloud-to-device-message
问题在于,实际上没有用于Rust的官方Azure IoT SDK。我只能找到该项目https://github.com/damienpontifex/azure-iot-sdk-rs,因为它与Tokio> 1.x有依赖关系,因此我不得不使用Tokio 0.x,所以我无法使用它。
但是,我可以想象向IoTHub发送云到设备的消息一定可行。
必需的信息可能是:device_id,body和属性,这是界面中可用的字段。
但是我在任何地方都没有找到更多细节。任何帮助表示赞赏。
最佳答案
确实,没有官方的SDK-但您可以看看它的其他一些实现,例如this one和以下示例:
use tokio::time;
use azure_iot_sdk::{IoTHubClient, DeviceKeyTokenSource, Message};
#[tokio::main]
async fn main() -> azure_iot_sdk::Result<()> {
let iothub_hostname = "iothubname.azure-devices.net";
let device_id = "MyDeviceId";
let token_source = DeviceKeyTokenSource::new(
iothub_hostname,
device_id,
"TheAccessKey",
).unwrap();
let mut client =
IoTHubClient::new(iothub_hostname, device_id.into(), token_source).await?;
let mut interval = time::interval(time::Duration::from_secs(1));
let mut count: u32 = 0;
loop {
interval.tick().await;
let msg = Message::builder()
.set_body(format!("Message #{}", count).as_bytes().to_vec())
.set_message_id(format!("{}-t", count))
.build();
client.send_message(msg).await?;
count += 1;
}
Ok(())
}
或者,如果Rust不是硬性要求(至少是端到端),也许您可以拥有一个独立的服务来处理IoT Hub的操作,并将其作为常规REST服务从Rust代码中调用。
关于azure - Rust应用程序如何将云到设备的消息发送到旨在到达设备的IoTHub?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65942688/