public class AzureIoTExample {
private static AzureIoTExample.MessageCallbackMqtt msgCallback = new AzureIoTExample.MessageCallbackMqtt();
protected static class MessageCallbackMqtt implements MessageCallback {
@Override
public IotHubMessageResult execute(Message msg, Object context) {
return IotHubMessageResult.COMPLETE;
}
}
private static ModuleClient client = null;
public static void main(String[] args) throws IOException, ModuleClientException {
IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
client = ModuleClient.createFromEnvironment (protocol);
client.setMessageCallback("Input", msgCallback, client);
client.registerConnectionStatusChangeCallback(new ConnectionStatusChangeCallback(), null);
client.open();
System.out.print(System.getenv("IothubConnectionstringVariableName"));
}
}
Trying to connect with IoTEdge using Azure Java SDK via ModuleClient Class of azure.sdk.iot.device Package. when I'm running the code. was getting an error i.e., Environment IoTEdge_WorkLoadURI is required.
To Achieve the connection what exactly needs to done and How to Achieve this ??
package org.example;// Import necessary libraries
import com.microsoft.azure.sdk.iot.device.*;
import com.microsoft.azure.sdk.iot.device.exceptions.IotHubClientException;
import com.microsoft.azure.sdk.iot.device.transport.IotHubConnectionStatus;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
public class SendToIoTEdgeSample {
private static final int D2C_MESSAGE_TIMEOUT_MILLISECONDS = 10000;
public static void main(String[] args) throws IOException, URISyntaxException, IotHubClientException, InterruptedException {
// Your IoT Hub connection string and other configurations
String connString = "IOT_edge_CONNECTION_STRING";
// System.getenv("IOT_edge_CONNECTION_STRING");
int numRequests = 5; // Specify the number of messages to send
// Using MQTT protocol
IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
System.setProperty("logback.configurationFile", "path/to/logback.xml");
System.out.println("Successfully read input parameters.");
System.out.format("Using communication protocol %s.\n", protocol.name());
// Create an IoT Hub client
DeviceClient client = new DeviceClient(connString, protocol);
System.out.println("Successfully created an IoT Hub client.");
// Open connection to IoT Hub (Edge)
client.open(true);
System.out.println("Opened connection to IoT Hub (Edge).");
System.out.println("Beginning to send messages...");
// Message sending loop
for (int i = 0; i < numRequests; ++i) {
double temperature = 20 + Math.random() * 10;
double humidity = 30 + Math.random() * 20;
String msgStr = "{\"temperature\":" + temperature + ",\"humidity\":" + humidity + "}";
try {
Message msg = new Message(msgStr);
msg.setContentType("application/json");
msg.setProperty("temperatureAlert", temperature > 28 ? "true" : "false");
msg.setMessageId(java.util.UUID.randomUUID().toString());
msg.setExpiryTime(D2C_MESSAGE_TIMEOUT_MILLISECONDS);
System.out.println(msgStr);
// Send the message to the default module on Azure IoT Edge
client.sendEvent(msg);
System.out.println("Successfully sent the message");
} catch (IotHubClientException e) {
System.out.println("Failed to send the message. Status code: " + e.getStatusCode());
}
}
// Close the connection
System.out.println("Closing the client...");
client.close();
}
}
String connString = System.getenv("IOTEDGECONNECTIONSTRING");
pom.xml:
<dependencies>
<!-- Azure IoT Device SDK -->
<dependency>
<groupId>com.microsoft.azure.sdk.iot</groupId>
<artifactId>iot-device-client</artifactId>
<version>2.1.5</version>
</dependency>
<!-- Azure IoT Service SDK -->
<dependency>
<groupId>com.microsoft.azure.sdk.iot</groupId>
<artifactId>iot-service-client</artifactId>
<version>2.1.6</version>
</dependency>
<!-- Logback Classic for Logging -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.6</version>
</dependency>
</dependencies>
Output: