2017-06-22 111 views
0

我开发了一个azure函数来处理消息进入IoTHub时的解压缩。Azure功能:IoTHub作为输入和输出

功能是连接到IoTHub内置的消息端点,因此它可以像一个EventHub作用。

我想要的功能是将解压后的内容输出回IoTHub,这样我运行的流分析和其他工作就不必连接到不同的端点以继续接收遥测。

似乎有文档围绕Azure的功能和挂钩起来,以IoTHubs相当数量的,但还有一部分是从去年开始,我知道事情已经改变了不少。

这是我目前的连接字符串来读取和写入同一IoTHub:

Endpoint=sb://iothub-ns-34997-5db385cb1f.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=;EntityPath=IoTHub

现在我已经设置了输出去IoTHub终点,我得到一个错误

Exception while executing function: Functions.DecompressionJS. Microsoft.Azure.WebJobs.Host: Error while handling parameter _binder after function returned:. Microsoft.ServiceBus: Unauthorized access. 'Send' claim(s) are required to perform this operation. Resource: 'sb://iothub-ns-34997-5db385cb1f.servicebus.windows.net/iothub'. TrackingId:e85de1ed565243bcb30bc622a2cab252_G4, SystemTracker:gateway6, Timestamp:6/22/2017 9:20:16 PM. 

所以我想有一些错误的连接字符串,所以我修改它包含/ iothub,例外告诉我使用的,因为端点的其余部分匹配当前的连接字符串。

一旦我更新了连接字符串,并重新运行我得到了一个不同异常的函数:

Exception while executing function: Functions.DecompressionJS. Microsoft.Azure.WebJobs.Host: Error while handling parameter _binder after function returned:. Microsoft.ServiceBus: Invalid EventHub address. It must be either of the following. Sender: <EventHubName>. Partition Sender: <EventHubName>/Partitions/<PartitionNumber>. Partition Receiver: <EventHubName>/ConsumerGroups/<ConsumerGroupName>/Partitions/<PartitionNumber>. TrackingId:ecb290822f494a86a61c21712656ea4c_G0, SystemTracker:gateway6, Timestamp:6/22/2017 8:44:14 PM. 

所以在这一点上,我认为这个IoTHub端点仅用于阅读的消息,也没有办法将解压缩的内容返回到IoTHub。

我希望有人能证明我错了,帮我配置我的连接字符串,所以我可以有一个闭环,并检索和发送消息,并从IoTHub没有中介。

+1

您不应该公开发布您的访问密钥... – Mikhail

+0

感谢您的领导。我已经通过省略了一些内容修改了访问密钥,但是我编辑了共享访问密钥,因此它不再是实际的密钥。 –

+1

请注意,旧访问密钥仍位于[公共修订历史记录](// stackoverflow.com/posts/44709647/revisions)中。 – halfer

回答

0

Azure的物联网中心是设备和Azure云后端解决方案之间的双向网关。与Azure IoT Hub的通信通过其面向设备和面向服务的端点完成。查看更多详情here

您的方案要求其传递到遥测数据流管道之前,解压缩设备事件。 TelemetryPrepocessing

:基本上在典型天青流管道此遥测预处理可以在 天青功能(或辅助角色)和/或 天青流分析(ASA)的工作等将在下面图中所示进行

如您所见,AF和/或ASA作业正在更改流管线中的实时遥测数据,并将其状态存储在下一个实体(如Event Hub)中。这是实时流管道和推送模型的常见和推荐模式。

你的方案还需要保持同样的遥测路径(源),因为你拥有它的非压缩设备事件,所以比有一个“非标准”的解决方案。下面的屏幕片段显示了这种解决方案的一个示例:

EmulateDevice

上述溶液的概念是基于在后端侧的设备模拟器。 Azure IoT Hub Routes会将所有预处理事件转发到自定义端点(如Event Hub)。

在这之后,Azure功能将负责解压缩摄取的事件并为该设备(如仿真设备)创建一个新的事件。现在,仿真设备可以像其他真实设备一样向Azure物联网集线器发送D2C消息。

请注意,仿真设备正在使用Https协议(无连接)和Azure IoT Hub授权。

来自Azure IoT Hub中模拟设备的事件被路由到默认事件集线器,例如默认遥测路径。

请注意,上述解决方案允许选择基于路由/规则的事件预处理,并且其使用取决于业务模型。