Cloud-naar-apparaat-berichten verzenden met IoT Hub (Python)
Azure IoT Hub is een volledig beheerde service die betrouwbare en veilige bidirectionele communicatie tussen miljoenen apparaten en een back-end van een oplossing mogelijk maakt.
In dit artikel leest u informatie over:
Cloud-naar-apparaat-berichten (C2D) verzenden vanaf de back-end van uw oplossing naar één apparaat via IoT Hub
Cloud-naar-apparaat-berichten ontvangen op een apparaat
Notitie
De functies die in dit artikel worden beschreven, zijn alleen beschikbaar in de standaardlaag van de IoT Hub. Zie Choose the right IoT Hub tier for your solution (De juiste IoT Hub laag voor uw oplossing kiezen) voor meer informatie over de lagen Basic en Standard/free IoT Hub.
Aan het einde van dit artikel voert u twee Python-console-apps uit:
SimulatedDevice.py: simuleert een apparaat dat verbinding maakt met uw IoT-hub en cloud-naar-apparaat-berichten ontvangt.
SendCloudToDeviceMessage.py: verzendt cloud-naar-apparaat-berichten naar de gesimuleerde apparaat-app via IoT Hub.
Notitie
IoT Hub biedt SDK-ondersteuning voor veel apparaatplatforms en -talen (C, Java, Python en JavaScript) via de Azure IoT-apparaat-SDK's.
Vereisten
Een actief Azure-account. (Als u geen account hebt, kunt u binnen een paar minuten een gratis account maken.)
Een IoT-hub. Maak er een met de CLI of de Azure Portal.
Een geregistreerd apparaat. Registreer er een in de Azure Portal.
Python versie 3.7 of hoger wordt aanbevolen. Zorg ervoor dat u de 32-bits of 64-bits installatie gebruikt, zoals vereist door uw configuratie. Zorg ervoor dat u Python toevoegt aan uw platformspecifieke omgevingsvariabele als u hierom wordt gevraagd tijdens de installatie.
Zorg ervoor dat de poort 8883 is geopend in de firewall. Het apparaatvoorbeeld in dit artikel maakt gebruik van het MQTT-protocol, dat communiceert via poort 8883. Deze poort is in sommige netwerkomgevingen van bedrijven en onderwijsinstellingen mogelijk geblokkeerd. Zie Verbinding maken met IoT Hub (MQTT) voor meer informatie en manieren om dit probleem te omzeilen.
Berichten ontvangen in de gesimuleerde apparaat-app
In deze sectie maakt u een Python-console-app om een apparaat te simuleren en cloud-naar-apparaat-berichten van de IoT-hub te ontvangen.
Installeer de Azure IoT Hub Device SDK voor Python vanaf een opdrachtprompt in uw werkmap:
pip install azure-iot-device
Maak met een teksteditor een bestand met de naam SimulatedDevice.py.
Voeg de volgende
import
instructies en variabelen toe aan het begin van het SimulatedDevice.py-bestand :import time from azure.iot.device import IoTHubDeviceClient RECEIVED_MESSAGES = 0
Voeg de volgende code toe aan SimulatedDevice.py bestand. Vervang de waarde van de
{deviceConnectionString}
tijdelijke aanduiding door de connection string voor het geregistreerde apparaat in Vereisten:CONNECTION_STRING = "{deviceConnectionString}"
Definieer de volgende functie die wordt gebruikt om ontvangen berichten naar de console af te drukken:
def message_handler(message): global RECEIVED_MESSAGES RECEIVED_MESSAGES += 1 print("") print("Message received:") # print data from both system and application (custom) properties for property in vars(message).items(): print (" {}".format(property)) print("Total calls received: {}".format(RECEIVED_MESSAGES))
Voeg de volgende code toe om de client te initialiseren en wacht totdat het cloud-naar-apparaat-bericht wordt ontvangen:
def main(): print ("Starting the Python IoT Hub C2D Messaging device sample...") # Instantiate the client client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING) print ("Waiting for C2D messages, press Ctrl-C to exit") try: # Attach the handler to the client client.on_message_received = message_handler while True: time.sleep(1000) except KeyboardInterrupt: print("IoT Hub C2D Messaging device sample stopped") finally: # Graceful exit print("Shutting down IoT Hub Client") client.shutdown()
Voeg de volgende hoofdfunctie toe:
if __name__ == '__main__': main()
Sla het bestand SimulatedDevice.py op en sluit het.
De IoT Hub-connection string ophalen
In dit artikel maakt u een back-endservice voor het verzenden van cloud-naar-apparaat-berichten via uw IoT Hub. Als u cloud-naar-apparaat-berichten wilt verzenden, heeft uw service de machtiging serviceverbinding nodig. Standaard wordt elke IoT Hub gemaakt met een gedeeld toegangsbeleid met de naam service die deze machtiging verleent.
Volg deze stappen om de IoT Hub connection string voor het servicebeleid op te halen:
Selecteer Resourcegroepenin de Azure Portal. Selecteer de resourcegroep waar uw hub zich bevindt en selecteer vervolgens uw hub in de lijst met resources.
Selecteer in het linkerdeelvenster van uw IoT-hub beleid voor gedeelde toegang.
Selecteer het servicebeleid in de lijst met beleidsregels.
Kopieer de Primaire connection string en sla de waarde op.
Zie Toegangsbeheer en machtigingen voor meer informatie over IoT Hub gedeelde toegangsbeleid en -machtigingen.
Een cloud-naar-apparaat-bericht verzenden
In deze sectie maakt u een Python-console-app waarmee cloud-naar-apparaat-berichten worden verzonden naar de gesimuleerde apparaat-app. U hebt de apparaat-id van uw apparaat en uw IoT Hub connection string nodig.
Open een opdrachtprompt in uw werkmap en installeer de Azure IoT Hub Service SDK voor Python.
pip install azure-iot-hub
Maak met een teksteditor een bestand met de naam SendCloudToDeviceMessage.py.
Voeg de volgende
import
instructies en variabelen toe aan het begin van het SendCloudToDeviceMessage.py-bestand :import random import sys from azure.iot.hub import IoTHubRegistryManager MESSAGE_COUNT = 2 AVG_WIND_SPEED = 10.0 MSG_TXT = "{\"service client sent a message\": %.2f}"
Voeg de volgende code toe aan SendCloudToDeviceMessage.py bestand. Vervang de
{iot hub connection string}
tijdelijke aanduidingen en{device id}
door de IoT Hub-connection string en apparaat-id die u eerder hebt genoteerd:CONNECTION_STRING = "{IoTHubConnectionString}" DEVICE_ID = "{deviceId}"
Voeg de volgende code toe om berichten naar uw apparaat te verzenden:
def iothub_messaging_sample_run(): try: # Create IoTHubRegistryManager registry_manager = IoTHubRegistryManager(CONNECTION_STRING) for i in range(0, MESSAGE_COUNT): print ( 'Sending message: {0}'.format(i) ) data = MSG_TXT % (AVG_WIND_SPEED + (random.random() * 4 + 2)) props={} # optional: assign system properties props.update(messageId = "message_%d" % i) props.update(correlationId = "correlation_%d" % i) props.update(contentType = "application/json") # optional: assign application properties prop_text = "PropMsg_%d" % i props.update(testProperty = prop_text) registry_manager.send_c2d_message(DEVICE_ID, data, properties=props) try: # Try Python 2.xx first raw_input("Press Enter to continue...\n") except: pass # Use Python 3.xx in the case of exception input("Press Enter to continue...\n") except Exception as ex: print ( "Unexpected error {0}" % ex ) return except KeyboardInterrupt: print ( "IoT Hub C2D Messaging service sample stopped" )
Voeg de volgende hoofdfunctie toe:
if __name__ == '__main__': print ( "Starting the Python IoT Hub C2D Messaging service sample..." ) iothub_messaging_sample_run()
Sla SendCloudToDeviceMessage.py bestand op en sluit het.
De toepassingen uitvoeren
U bent nu klaar om de toepassingen uit te voeren.
Voer bij de opdrachtprompt in uw werkmap de volgende opdracht uit om te luisteren naar cloud-naar-apparaat-berichten:
python SimulatedDevice.py
Open een nieuwe opdrachtprompt in uw werkmap en voer de volgende opdracht uit om cloud-naar-apparaat-berichten te verzenden:
python SendCloudToDeviceMessage.py
Noteer de berichten die door het apparaat zijn ontvangen.
Volgende stappen
In dit artikel hebt u geleerd hoe u cloud-naar-apparaat-berichten verzendt en ontvangt.
Zie IoT Hub berichten maken en lezen voor meer informatie over IoT Hub berichtindelingen.