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
<PackageReference Include="nanoFramework.Aws.IoTCore.Devices" Version="1.1.113" />
paket add nanoFramework.Aws.IoTCore.Devices --version 1.1.113
#r "nuget: nanoFramework.Aws.IoTCore.Devices, 1.1.113"
// 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
欢迎使用 .NET nanoFramework Aws.IoTCore.Devices 仓库
构建状态
组件 | 构建状态 | NuGet 软件包 |
---|---|---|
nanoFramework.Aws.IoTCore.Devices |
查看实际操作
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);
注意:当证书过期时,您必须将新的证书和密钥完全刷新到设备中,或者将它们的主要版本和次要版本包括到您的代码中。
将证书存储到设备中
您可以将证书存储在设备的闪存中而不是代码中,这样如果需要更改证书,只需清理当前存储并上传新的即可。编辑网络属性
导航到常规
选项卡
浏览选择您的证书,它可以以二进制(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;
}
}
注意:sender
是MqttConnectionClient
类,您可以使用它发送确认消息或任何您已放置的逻辑。
状态更新事件
有状态更新事件可用
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 是兼容的。 |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.Json (>= 2.2.122)
- nanoFramework.M2Mqtt (>= 5.1.138)
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 |