nanoFramework.Aws.IoTCore.Devices 1.1.113

前缀已保留
dotnet add package nanoFramework.Aws.IoTCore.Devices --version 1.1.113                
NuGet\Install-Package nanoFramework.Aws.IoTCore.Devices -Version 1.1.113                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.Aws.IoTCore.Devices" Version="1.1.113" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用此包。
paket add nanoFramework.Aws.IoTCore.Devices --version 1.1.113                
#r "nuget: nanoFramework.Aws.IoTCore.Devices, 1.1.113"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互式工具或脚本的源代码中以引用包。
// Install nanoFramework.Aws.IoTCore.Devices as a Cake Addin
#addin nuget:?package=nanoFramework.Aws.IoTCore.Devices&version=1.1.113

// Install nanoFramework.Aws.IoTCore.Devices as a Cake Tool
#tool nuget:?package=nanoFramework.Aws.IoTCore.Devices&version=1.1.113                

Quality Gate Status Reliability Rating NuGet #yourfirstpr Discord

nanoFramework logo


欢迎使用 .NET nanoFramework Aws.IoTCore.Devices 仓库

构建状态

组件 构建状态 NuGet 软件包
nanoFramework.Aws.IoTCore.Devices Build Status NuGet

查看实际操作

TODO!请帮助我们添加一些示例!

使用方式

重要:由于 TLS,您必须连接到互联网(这意味着已经从您的路由器获得了一个 IP 地址)并且必须有一个有效(至少今天的)日期和时间。请检查使用网络的实际示例(特别是包括 TLS/NTP 的示例)以帮助您确保它将正常工作。

此 AWS IoT SDK 使用 MQTT。因此,您需要确保您已经打开了到 TCP 端口 8883 的出站防火墙端口。如果您在企业网络中,这可能已被阻止。

如果它被阻止,我们计划在将来添加 WebSocket 支持。

尝试使类名和方法名接近 .NET nanoFramework C# Azure IoT SDK。这应允许在两种云提供商环境中更容易地移植代码。

证书

您有2种方法提供正确的Azure IoT TLS证书

  • 在其构造函数中传入
  • 将其存储到设备中

X.509Certificates,为了您的方便,包含了用于连接AWS IoT的默认根证书。

通过构造函数

您需要将证书嵌入到代码中,或将其作为资源添加

const string AwsRootCA = @"-----BEGIN CERTIFICATE-----
MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA
A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI
U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs
N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv
o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU
5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy
rqXRfboQnoZsG4q5WTP468SQvvG5
-----END CERTIFICATE-----
";
MqttConnectionClient awsIoT = new MqttConnectionClient(IotBrokerAddress, ThingId, clientCert, MqttConnectionClient.QoSLevel.AtLeastOnce, awsRootCACert: new X509Certificate(AzureRootCA));

您也可以将二进制证书放置在资源中,并从其中获取证书

X509Certificate awsRootCACert = new X509Certificate(Resources.GetBytes(Resources.BinaryResources.AwsCAcertificate));
MqttConnectionClient awsIoT = new MqttConnectionClient(IotBrokerAddress, ThingId, clientCert, MqttConnectionClient.QoSLevel.AtLeastOnce, awsRootCACert);

注意:当证书过期时,您必须将新的证书和密钥完全刷新到设备中,或者将它们的主要版本和次要版本包括到您的代码中。

将证书存储到设备中

您可以将证书存储在设备的闪存中而不是代码中,这样如果需要更改证书,只需清理当前存储并上传新的即可。编辑网络属性

edit device network

导航到常规选项卡

device network certificate

浏览选择您的证书,它可以以二进制(crt、der)或字符串(pem、txt)形式存在,并选择确定。连接时将自动选择要连接的证书。

创建MqttConnectionClient

您可以使用包含私有证书和密钥的证书或IAM(目前不支持)连接到AWS IoT核心。以下示例显示了如何创建它

const string ThingId = "nanoDeviceShadow";
const string IotBrokerAddress = "<account>-ats.iot.<region>.amazonaws.com";
//make sure to add a correct pfx certificate
X509Certificate2 clientCert = new X509Certificate2(ClientRsaSha256Crt, ClientRsaKey, "");
MqttConnectionClient awseIoT = new MqttConnectionClient(IotBrokerAddress, ThingId, clientCert, MqttConnectionClient.QoSLevel.AtLeastOnce, awsRootCACert);

注意:请参见前面的部分,了解如何更好地传递您的证书。示例显示了上传到设备中的证书而不是代码中的。

获取和更新设备阴影

您只需调用GetShadow函数即可请求您的阴影。

var shadow = awsIoT.GetShadow(new CancellationTokenSource(20000).Token);
if (shadow == null)
{
    Debug.WriteLine($"Can't get the shadow");
    awsIoT.Close();
    return;
}

Debug.WriteLine($"Shadow ClientToken: {shadow.DeviceId}, #desired: {shadow.status.desired}, #reported: {shadow.status.reported}");

注意:使用CancellationToken的重要性很重要,可以在指定时间后取消它。否则,此操作将阻塞线程,直到阴影接收为止。

阴影有状态属性,报告的和期望的。它们是散列表,您可以得到或尝试获取任何元素。

您可以像这样简单地向阴影报告

TODO:尚不可用!!!

ShadowCollection reported = new ShadowCollection();
reported.Add("firmware", "myNano");
reported.Add("sdk", 0.2);
awsIoT.UpdateReportedProperties(reported);

您还有等待阴影更新确认的选项,在这种情况下,请使用可以取消的CancellationToken。否则,检查将忽略。

注意:如果未检查阴影接收确认或未及时到达,函数将返回false。

您还可以注册任何阴影更新

awsIoT.ShadowUpated += ShadowUpdatedEvent;

void ShadowUpdatedEvent(object sender, ShadowUpdateEventArgs e)
{
    Debug.WriteLine($"Shadow update received:  {e.Shadow}");
}

发送消息

您必须使用SendMessage函数来向AWS IoT发送任何类型的消息或遥测数据。与其他功能一样,您有使用可以取消的CancellationToken来确保送达的可能性。如果使用不能取消的,将忽略交付保险,并返回false。

var isReceived = awsIoT.SendMessage($"{{\"Temperature\":42,\"Pressure\":1024}}", new CancellationTokenSource(5000).Token);
Debug.WriteLine($"Message received by IoT Core: {isReceived}");

注意:消息将以您创建连接时的相同服务质量发送。对于质量0,您不会收到任何答复。在这种情况下,您可以将其简化为

awsIoT.SendMessage($"{{\"Temperature\":42,\"Pressure\":1024}}");

云到设备消息

您 can 注册事件以接收云到设备消息

TODO:检查是否有效!!!

awsIoT.CloudToDeviceMessage += CloudToDeviceMessageEvent;

// The following example shows how to display all keys in debug
void CloudToDeviceMessageEvent(object sender, CloudToDeviceMessageEventArgs e)
{
    Debug.WriteLine($"Message arrived: {e.Message}");
    foreach (string key in e.Properties.Keys)
    {
        Debug.Write($"  Key: {key} = ");
        if (e.Properties[key] == null)
        {
            Debug.WriteLine("null");
        }
        else
        {
            Debug.WriteLine((string)e.Properties[key]);
        }
    }

    // e.Message contains the message itself
    if(e.Message == "stop")
    {
        ShoudIStop = true;
    }
}

注意:senderMqttConnectionClient类,您可以使用它发送确认消息或任何您已放置的逻辑。

状态更新事件

有状态更新事件可用

awsIoT.StatusUpdated += StatusUpdatedEvent;

void StatusUpdatedEvent(object sender, StatusUpdatedEventArgs e)
{
    Debug.WriteLine($"Status changed: {e.Status.State}, {e.Status.State}");
    // You may want to reconnect or use a similar retry mechanism
    ////if (e.Status.State == Status.Disconnected)
    ////{
    ////    mqtt.Open();
    ////}
}

注意,它们基于状态变化,因此连接或断开连接事件到达后,一旦发生其他事件(如接收阴影),它们将很快被其他事件取代。

待讨论的未来项目

  • 有关“持久”连接(或不)的更好的文档,包括云策略文档以供支持
  • 添加一些集成测试,包括自动设置云代理的脚本(以及/或)手动设置文档,以确保易用性。
  • 部分Greengrass支持?!
  • WebSocket支持?!
  • 车队配置支持?!

反馈和文档

对于文档、提供反馈、报告问题以及了解如何贡献,请参阅主仓库

加入我们的 Discord 社区这里

鸣谢

本项目贡献者名单可在CONTRIBUTORS页面找到。

许可证

.NET nanoFramework 类库使用MIT 许可证

行为准则

本项目采用贡献者公约定义的行为准则,以明确我们社区中期望的行为。更多信息请参阅.NET Foundation 行为准则

.NET Foundation

本项目由.NET Foundation支持。

产品 兼容和额外的计算目标框架版本。
.NET 框架 net 是兼容的。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于目标框架.NET Standard的信息。

NuGet 包

此包未被任何 NuGet 包使用。

GitHub 仓库

此包未被任何流行的 GitHub 仓库使用。

版本 下载 最后更新
1.1.113 60 7/30/2024
1.1.110 117 5/20/2024
1.1.108 71 5/13/2024
1.1.106 79 5/10/2024
1.1.104 99 4/30/2024
1.1.102 118 4/9/2024
1.1.100 118 4/3/2024
1.1.97 140 1/29/2024
1.1.95 85 1/26/2024
1.1.93 80 1/24/2024
1.1.91 85 1/23/2024
1.1.87 213 11/10/2023
1.1.85 104 11/8/2023
1.1.83 131 10/10/2023
1.1.81 143 8/28/2023
1.1.79 128 8/28/2023
1.1.77 127 8/28/2023
1.1.74 150 5/29/2023
1.1.65 285 1/14/2023
1.1.62 296 12/28/2022
1.1.60 299 12/27/2022
1.1.53 417 11/24/2022
1.1.48 313 11/15/2022
1.1.46 333 11/4/2022
1.1.43 339 10/28/2022
1.1.41 386 10/28/2022
1.1.39 374 10/27/2022
1.1.37 348 10/26/2022
1.1.34 363 10/16/2022
1.1.29 374 10/4/2022
1.1.27 382 9/30/2022
1.1.25 443 9/23/2022
1.1.23 400 9/20/2022
1.1.21 402 9/16/2022
1.1.18 389 9/9/2022
1.1.14 430 8/5/2022
1.1.12 409 7/26/2022
1.1.10 412 7/19/2022
1.1.8 422 6/14/2022
1.1.6 431 6/14/2022
1.1.4 434 6/10/2022
1.1.1 417 5/30/2022
1.0.0 442 3/29/2022
1.0.0-preview.132 112 3/29/2022
1.0.0-preview.130 115 3/28/2022
1.0.0-preview.128 116 3/28/2022
1.0.0-preview.126 112 3/28/2022
1.0.0-preview.124 110 3/28/2022
1.0.0-preview.120 121 3/17/2022
1.0.0-preview.117 116 3/17/2022
1.0.0-preview.115 115 3/15/2022
1.0.0-preview.113 114 3/15/2022
1.0.0-preview.111 116 3/15/2022
1.0.0-preview.109 113 3/15/2022
1.0.0-preview.108 107 3/15/2022
1.0.0-preview.107 105 3/11/2022
1.0.0-preview.106 117 3/4/2022
1.0.0-preview.105 103 3/1/2022
1.0.0-preview.102 114 2/17/2022
1.0.0-preview.101 106 2/15/2022
1.0.0-preview.100 111 2/8/2022
1.0.0-preview.99 114 2/8/2022
1.0.0-preview.98 125 2/4/2022
1.0.0-preview.97 121 2/4/2022
1.0.0-preview.96 121 2/4/2022
1.0.0-preview.95 129 2/1/2022
1.0.0-preview.94 126 1/28/2022
1.0.0-preview.93 127 1/28/2022
1.0.0-preview.92 119 1/28/2022
1.0.0-preview.91 124 1/28/2022
1.0.0-preview.90 121 1/28/2022
1.0.0-preview.89 132 1/28/2022
1.0.0-preview.88 120 1/25/2022
1.0.0-preview.87 116 1/21/2022
1.0.0-preview.86 119 1/21/2022
1.0.0-preview.85 121 1/21/2022
1.0.0-preview.84 123 1/21/2022
1.0.0-preview.83 126 1/21/2022
1.0.0-preview.82 118 1/21/2022
1.0.0-preview.80 126 1/14/2022
1.0.0-preview.79 122 1/14/2022
1.0.0-preview.76 128 1/6/2022
1.0.0-preview.74 122 1/5/2022
1.0.0-preview.72 125 1/5/2022
1.0.0-preview.71 127 1/4/2022
1.0.0-preview.70 126 1/4/2022
1.0.0-preview.69 126 12/31/2021
1.0.0-preview.68 121 12/31/2021
1.0.0-preview.67 118 12/31/2021
1.0.0-preview.66 129 12/29/2021
1.0.0-preview.65 125 12/29/2021
1.0.0-preview.63 133 12/17/2021
1.0.0-preview.61 142 12/4/2021
1.0.0-preview.59 138 12/4/2021
1.0.0-preview.57 143 12/3/2021
1.0.0-preview.55 148 12/3/2021
1.0.0-preview.53 138 12/3/2021
1.0.0-preview.51 132 12/3/2021
1.0.0-preview.49 134 12/2/2021
1.0.0-preview.47 131 12/2/2021
1.0.0-preview.45 129 12/2/2021
1.0.0-preview.43 133 12/2/2021
1.0.0-preview.41 142 12/1/2021
1.0.0-preview.38 135 11/23/2021
1.0.0-preview.36 132 11/14/2021
1.0.0-preview.34 238 11/13/2021
1.0.0-preview.32 174 11/12/2021
1.0.0-preview.30 156 11/12/2021
1.0.0-preview.28 143 11/10/2021
1.0.0-preview.25 180 10/22/2021
1.0.0-preview.23 133 10/19/2021
1.0.0-preview.20 181 10/18/2021
1.0.0-preview.18 183 10/15/2021
1.0.0-preview.16 187 10/15/2021
1.0.0-preview.14 194 10/15/2021
1.0.0-preview.12 203 10/15/2021
1.0.0-preview.10 204 10/15/2021
1.0.0-preview.8 208 10/15/2021
1.0.0-preview.6 207 10/15/2021
1.0.0-preview.5 219 10/15/2021