Imports scalar data from iot devices connected to the Azure IOT Hub: https://azure.microsoft.com/en-us/services/iot-hub/ |
Available since 2020.01.
The AzureIotHub Import connects to the built-in endpoint of the Azure IOT Hub. By default the IOT Hub exposes the endpoint as an Even Hub compatible endpoint. This allows clients to connect using the AMQPS protocol, which is used by the AzureIotHub import. The default port for AMQPS is port 5671 and a forecasting shell server should be allowed to connect to the Azure IOT Hub using this port from the Forecasting Shell Server.
The AzureIotHub import is a long running import that will keep running for one hour and will keep listening voor messages to arrive. After one hour the import will finish and state is store to keep track of the messages that have been imported. Since the import is completed after one hour, imports should be scheduled hourly and the import should never run in parallel on multiple Forecasting Shell Servers.
The current implementation only supports PI XML as content format. |
To configure the AzureIotHub import, some required properties have to be specified:
| Property name | Description | Example value | Azure Portal Screenshot |
|---|---|---|---|
eventHubCompatiblePath | Event HUB compatible name that can be used to access the IoT Hub over AMQPS | iothub-ehub-delft-fews-3109254-e665c23b62 | AzureIotHub-Built-inendpoint |
consumersGroup | An event heb can have different consumer groups. Specify the used consumer group here. | $Default | AzureIotHub-Built-inendpoint |
eventHubCompatibleHostname | Event hub compatible hostname that can be used to access the IoT Hub over AMQPS | ihsuprodamres086dednamespace.servicebus.windows.net | AzureIotHub-Built-inendpoint |
numberOfPartitions | For scalability an event hub can be partitioned. The number of partitions used have to be specified here. | 2 | AzureIotHub-Built-inendpoint |
sharedAccessPolicyName | Name of the SAS policy that is used for authentication agains the IoT Hub. | service | AzureIotHub-SharedAccessPolicies |
sharedAccessPolicyKey | The actual policy key that can be used to authenticate against the IoT Hub. | V86dqC3AhjIqSgvAuShKDSsNamUJh5rJrqZ1e3hw7EA= | AzureIotHub-SharedAccessPolicies |
runningTimeMilliseconds | Optional property. Specifies how long the import will run in milliseconds. Default is one hour. Should only be changed for testing. | 120000 | not relevant |
This example is configured to import scalar observations from the Azure IOT Hub
<?xml version="1.0" encoding="UTF-8"?>
<timeSeriesImportRun xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews
http://fews.wldelft.nl/schemas/version1.0/timeSeriesImportRun.xsd">
<import>
<general>
<importType>AzureIotHub</importType>
<serverUrl>https://delft-fews-iot-hub.azure-devices.net</serverUrl> <!-- Not actually used -->
<relativeViewPeriod unit="day" start="-7" end="1" ></relativeViewPeriod>
<missingValue>-99.99</missingValue>
<dataFeedId>Azure IOT Hub</dataFeedId> <!-- data feed id is required for IOT hub -->
</general>
<properties>
<string key="eventHubCompatiblePath" value="iothub-ehub-delft-fews-3109254-e665c23b62" />
<string key="consumersGroup" value="$Default" />
<string key="eventHubCompatibleHostname" value="ihsuprodamres086dednamespace.servicebus.windows.net" />
<string key="sharedAccessPolicyName" value="service" />
<string key="sharedAccessPolicyKey" value="V86dqC3AhjIqSgvAuShKDSsNamUJh5rJrqZ1e3hw7EA=" />
<int key="numberOfPartitions" value="2" />
<int key="runningTimeMilliseconds" value="120000" /> <!-- run for 2 minutes for testing. Overrules the default running time of one hour -->
</properties>
<timeSeriesSet>
<moduleInstanceId>ImportObserved</moduleInstanceId>
<valueType>scalar</valueType>
<parameterId>T.obs</parameterId>
<locationSetId>LocationSetId</locationSetId>
<timeSeriesType>external historical</timeSeriesType>
<timeStep unit="nonequidistant"/>
<readWriteMode>add originals</readWriteMode>
<expiryTime unit="year" multiplier="1"/>
</timeSeriesSet>
</import>
</timeSeriesImportRun>
|
To configure the AzureIotHub some information from the Azure Portal is required. This sections shows the relevant parts of the Azure Portal to set the required properties.
From the Azure IOT Hub built-in endpoint page, the following properties can be determined:
eventHubCompatiblePath: iothub-ehub-delft-fews-3109254-e665c23b62
eventHubCompatibleHostname: ihsuprodamres086dednamespace.servicebus.windows.net
consumersGroup: Set the $Default in this example

From the Azure IOT Hub shared access policies page, the following properties can be determined:

To be able to send test messages to the Azure IoT Hub, a device has to be registered. See the following example of the Azure Portal where on the IoT device page, a device has been registered called "deltares-test-iot-device".

When looking at the details of a client registration, among others the Primary or Secondary connection string can be determined and used for testing.

There are different ways to test the import.
See: https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.azure-iot-tools
Microsoft Visual Studio Code has support for a IoT Hub extension pack called IoT tools, that can be used to send Device to Cloud messages (D2C messages). See the following screenshot to see how to send a D2C message from the test client. To use The IoT Hub tools, an Azure Portal account is required.


See: https://www.codeproject.com/Articles/1173356/Azure-IoT-Hub-Tester
With this tool a connection can be made to the IOT hub using the primary or secondary connection string that is given with the client registration. No Azure Portal account is required to test.
The namespace is NOT the name of the iot client, but the name of the iot hub. In this case: delft-fews-iot-hub |

Once connected, test message can be sent with the tool. Currently only PI XML can be used for testing.
