当前位置: 首页 > 知识库问答 >
问题:

Rust应用程序如何向打算到达设备的IoTHub发送云到设备的消息?

胡昊
2023-03-14

我正在构建一个基于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

问题是,目前还没有官方的Azure IoT SDK。我只能找到这个项目https://github.com/damienpontifex/azure-iot-sdk-rs我不能用它,因为它和Tokio有依赖关系

然而,我可以想象向IoTHub发送云到设备的消息一定是可行的。所需信息可能是:device_id、body和属性,它们是界面中可用的字段。

但我还没有找到更多的细节。感谢您的帮助。

共有1个答案

章城
2023-03-14

事实上,没有官方的SDK——但您可以查看其他一些实现,比如下面的示例:

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服务总线添加到云到设备消息队列中?当我收到消息时,我必须确保所有消息都以相同的顺序到达IoTHub。我找不到IoTHub中的标准队列是否提供它。我想使用ServiceBus的第二个原因是过期时间也更长,IoTHub只提供48小时的消息。我知道通过在IoTHub配置中添加endpoint和路由,我可以很容易地在设备消息中使用ServiceBus,但是C2D消息呢?

  • 在搜索文档之后,我找不到任何关于如何在没有使用外部服务器的情况下使用FCM向设备发送消息的信息。 例如,如果我正在创建一个聊天应用程序,我将需要向用户发送关于未读消息的推送通知,因为他们不会一直在线,而且我不可能在后台有一个始终连接到实时数据库的持久服务,因为这会占用太多资源。 那么当某个用户“B”向他/她发送聊天消息时,我将如何向用户“a”发送推送通知呢?我需要一个外部服务器来完成这个任务吗?还

  • null 当我确实从Firebase云消息发送给自己一条测试消息时,它确实工作正常,并且成功地向每个设备发送了一个推送通知。 例如,以下是 null

  • 我不明白如何从iOS设备向另一个iOS设备发送消息,我试图理解Firebase通知和Google云消息之间的区别。 null Google Cloud Messaging:它将消息从服务器发送到设备(下游)或设备发送到服务器(上游)!! 上游示例: 如果我需要从一个设备发送一个推送消息到另一个设备呢!这是否意味着在设备发送消息到服务器之后,我必须编程firebase服务器发送推送到客户端?真让人摸

  • 我成功地集成了firebase。当我仅出于测试目的使用firebase站点的云消息发送通知时,设备会收到通知。但在我的应用程序中,我需要使用firebase从一台设备向另一台设备发送通知。。如何实现这一点。Swift 4,Xcode 10以下是一些代码: