Lesson 2.4.1 - Connect Device To IoT Hub
Lesson 2.4.1 - Connect Device To IoT Hub
3. Add the following imports to the top of the app.py file, below the existing imports:
This code imports the SDK to communicate with your IoT Hub.
4. Remove the import paho.mqtt.client as mqtt line as this library is no longer needed. Remove all the
MQTT code including the topic names, all code that uses mqtt_client and the handle_command . Keep the
while True: loop, just delete the mqtt_client.publish line form this loop.
Replace <connection string> with the connection string you retrieved for the device earlier in this lesson.
6. Below this code, add the following to create a device client object that can communicate with IoT Hub, and
connect it:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string)
print('Connecting')
device_client.connect()
print('Connected')
Send telemetry
Now that your device is connected, you can send telemetry to the IoT Hub instead of the MQTT broker.
This code creates an IoT Hub Message containing the soil moisture reading as a JSON string, then sends
this to the IoT Hub as a device to cloud message.
Handle commands
Your device needs to handle a command from the server code to control the relay. This is sent as a direct method
request.
def handle_method_request(request):
print("Direct method received - ", request.name)
if request.name == "relay_on":
relay.on()
elif request.name == "relay_off":
relay.off()
This defines a method, handle_method_request , that will be called when a direct method is called by the
IoT Hub. Each direct method has a name, and this code expects a method called relay_on to turn the relay
on, and relay_off to turn the relay off.
💁 This could also be implemented in a single direct method request, passing
the desired state of the relay in a payload that can be passed with the method
request and available from the request object.
2. Direct methods require a response to tell the calling code that they have been handled. Add the following
code at the end of the handle_method_request function to create a response to the request:
This code sends a response to the direct method request with an HTTP status code of 200, and sends this
back to the IoT Hub.
device_client.on_method_request_received = handle_method_request
This code tells the IoT Hub client to call the handle_method_request function when a direct method is
called.
💁 You can find this code in the code/pi (code/pi) or code/virtual-device (code/virtual-
device) folder.