2017-06-22 63 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中模擬設備的事件被路由到默認事件集線器,例如默認遙測路徑。

請注意,上述解決方案允許選擇基於路由/規則的事件預處理,並且其使用取決於業務模型。