#iot #azure #devices #hub #client #sdk #key

azure_iot_sdk

Client library for connection devices to Azure IoT Hub

8 releases (breaking)

0.8.0 May 11, 2021
0.7.1 Jan 23, 2021
0.6.0 Nov 22, 2020
0.5.0 Oct 18, 2020
0.1.0 Apr 18, 2020

#21 in #hub

42 downloads per month

MIT license

69KB
1.5K SLoC

Azure IoT SDK for Rust

Self developed library to interact with Azure IoT Hub using MQTT protocol

CI docs Crate cratedown cratelastdown

Running examples

Copy the sample config file

cp examples/config.sample.toml examples/config.toml

Edit values in examples/config.toml with your iot hub host, device and primary key

Usage

#[macro_use]
extern crate log;

use azure_iot_sdk::{client::IoTHubClient, message::Message};

use serde::Deserialize;

#[derive(Debug, Deserialize)]
struct DeviceConfig {
    hostname: String,
    device_id: String,
    shared_access_key: String,
}

impl DeviceConfig {
    fn from_env() -> Result<Self, config::ConfigError> {
        let mut cfg = config::Config::default();
        cfg.merge(config::File::with_name("examples/config"))?;
        cfg.try_into()
    }
}

#[tokio::main]
async fn main() {
    env_logger::from_env(env_logger::Env::default().default_filter_or("info")).init();

    let DeviceConfig {
        hostname,
        device_id,
        shared_access_key,
    } = DeviceConfig::from_env().unwrap();

    let token_source = DeviceKeyTokenSource::new(
        &hostname,
        &device_id,
        &shared_access_key,
    )
    .unwrap();

    let mut client = IoTHubClient::new(&hostname, device_id, token_source).await?;

    info!("Initialized client");

    let mut recv = client.get_receiver().await;
    let receive_loop = async {
        while let Some(msg) = recv.recv().await {
            match msg {
                MessageType::C2DMessage(msg) => info!("Received message {:?}", msg),
                _ => {}
            }
        }
    };

    let msg = Message::new(b"Hello, world!".to_vec());
    let sender = client.send_message(msg);

    tokio::join!(receive_loop, sender);
}

Dependencies

~7–20MB
~283K SLoC