Felhőből eszközre irányuló üzenetek küldése IoT Hub (Python) használatával
Azure IoT Hub egy teljes körűen felügyelt szolgáltatás, amely megbízható és biztonságos kétirányú kommunikációt tesz lehetővé több millió eszköz és egy megoldás háttérrendszere között.
Ez a cikk a következőkhöz nyújt útmutatást:
Felhőből eszközre (C2D) irányuló üzenetek küldése a megoldás háttérrendszeréből egyetlen eszközre a IoT Hub
Felhőből eszközre irányuló üzenetek fogadása egy eszközön
Megjegyzés
A cikkben ismertetett funkciók csak a IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub szintekkel kapcsolatos további információkért lásd: A megoldáshoz megfelelő IoT Hub szint kiválasztása.
A cikk végén két Python-konzolalkalmazást fog futtatni:
SimulatedDevice.py: szimulál egy eszközt, amely csatlakozik az IoT Hubhoz, és fogadja a felhőből az eszközre irányuló üzeneteket.
SendCloudToDeviceMessage.py: felhőből eszközre irányuló üzeneteket küld a szimulált eszközalkalmazásnak IoT Hub keresztül.
Ha többet szeretne megtudni a felhőből az eszközre irányuló üzenetekről, olvassa el A felhőből az eszközre irányuló üzenetek küldése IoT Hubról című témakört.
Megjegyzés
IoT Hub számos eszközplatformhoz és nyelvhez (C, Java, Python és JavaScript) támogatja az SDK-t az Azure IoT eszközoldali SDK-kon keresztül.
Előfeltételek
Aktív Azure-fiók. (Ha nincs fiókja, létrehozhat egy ingyenes fiókot néhány perc alatt.)
Egy IoT Hub. Hozzon létre egyet a parancssori felülettel vagy a Azure Portal.
Regisztrált eszköz. Regisztráljon egyet a Azure Portal.
A Python 3.7-es vagy újabb verziója ajánlott. Mindenképp a rendszernek megfelelő, 32 vagy 64 bites telepítést használja. Amikor a rendszer erre kéri, mindenképp adja hozzá a Pythont a platformspecifikus környezeti változóhoz.
Győződjön meg arról, hogy a 8883-as port nyitva van a tűzfalon. A cikkben szereplő eszközminta MQTT protokollt használ, amely a 8883-es porton keresztül kommunikál. Ez a port bizonyos vállalati és oktatási hálózati környezetekben blokkolható. További információkért és a probléma megoldásának módjaiért lásd: Csatlakozás IoT Hub (MQTT)-hez.
Üzenetek fogadása a szimulált eszközalkalmazásban
Ebben a szakaszban egy Python-konzolalkalmazást hoz létre egy eszköz szimulálásához és az IoT Hubról a felhőből az eszközre irányuló üzenetek fogadásához.
Telepítse a Azure IoT Hub Pythonhoz készült eszközoldali SDK-t egy parancssorból a munkakönyvtárból:
pip install azure-iot-device
Szövegszerkesztővel hozzon létre egy SimulatedDevice.py nevű fájlt.
Adja hozzá a következő
import
utasításokat és változókat a SimulatedDevice.py fájl elején:import time from azure.iot.device import IoTHubDeviceClient RECEIVED_MESSAGES = 0
Adja hozzá a következő kódot SimulatedDevice.py fájlhoz. Cserélje le a
{deviceConnectionString}
helyőrző értékét a regisztrált eszköz kapcsolati sztring az Előfeltételek területen:CONNECTION_STRING = "{deviceConnectionString}"
Adja meg a következő függvényt, amely a fogadott üzenetek konzolra való nyomtatására szolgál:
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))
Adja hozzá a következő kódot az ügyfél inicializálásához, és várja meg a felhőből az eszközre üzenet fogadását:
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()
Adja hozzá a következő fő függvényt:
if __name__ == '__main__': main()
Mentse és zárja be a SimulatedDevice.py fájlt.
A felhőből az eszközre irányuló üzenetéletciklusról és arról, hogy IoT Hub hogyan dolgozza fel a felhőből az eszközre irányuló üzeneteket, olvassa el A felhőből az eszközre irányuló üzenetek küldése IoT Hubról című témakört.
Az IoT Hub kapcsolati sztring lekérése
Ebben a cikkben egy háttérszolgáltatást hoz létre, amellyel felhőből eszközre irányuló üzeneteket küldhet a IoT Hub keresztül. A felhőből az eszközre irányuló üzenetek küldéséhez a szolgáltatásnak rendelkeznie kell a szolgáltatás csatlakoztatási engedélyével. Alapértelmezés szerint minden IoT Hub egy szolgáltatás nevű megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja.
A szolgáltatásszabályzathoz tartozó IoT Hub kapcsolati sztring az alábbi lépésekkel szerezheti be:
A Azure Portal válassza az Erőforráscsoportok lehetőséget. Válassza ki azt az erőforráscsoportot, ahol a központ található, majd válassza ki a központot az erőforrások listájából.
Az IoT Hub bal oldali paneljén válassza a Megosztott hozzáférési szabályzatok lehetőséget.
A szabályzatok listájából válassza ki a szolgáltatásházirendet.
Másolja ki az Elsődleges kapcsolati sztring, és mentse az értéket.
A IoT Hub megosztott hozzáférési szabályzatokkal és engedélyekkel kapcsolatos további információkért lásd: Hozzáférés-vezérlés és engedélyek.
Üzenet küldése felhőből eszközre
Ebben a szakaszban egy Python-konzolalkalmazást hoz létre, amely felhőből eszközre irányuló üzeneteket küld a szimulált eszközalkalmazásnak. Szüksége lesz az eszköz azonosítójára és az IoT Hub kapcsolati sztring.
Nyisson meg egy parancssort a munkakönyvtárban, és telepítse a Pythonhoz készült Azure IoT Hub Service SDK-t.
pip install azure-iot-hub
Szövegszerkesztővel hozzon létre egy SendCloudToDeviceMessage.py nevű fájlt.
Adja hozzá a következő
import
utasításokat és változókat a SendCloudToDeviceMessage.py fájl elején: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}"
Adja hozzá a következő kódot SendCloudToDeviceMessage.py fájlhoz. Cserélje le a és
{device id}
helyőrző{iot hub connection string}
értékeket a korábban feljegyzett IoT Hub-kapcsolati sztring és eszközazonosítóra:CONNECTION_STRING = "{IoTHubConnectionString}" DEVICE_ID = "{deviceId}"
Adja hozzá az alábbi kódot az üzenetek eszközre küldéséhez:
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" )
Adja hozzá a következő fő függvényt:
if __name__ == '__main__': print ( "Starting the Python IoT Hub C2D Messaging service sample..." ) iothub_messaging_sample_run()
Mentse és zárja be SendCloudToDeviceMessage.py fájlt.
Az alkalmazások futtatása
Most már készen áll az alkalmazások futtatására.
Futtassa a következő parancsot a parancssorban a felhőből az eszközre irányuló üzenetek figyeléséhez:
python SimulatedDevice.py
Nyisson meg egy új parancssort a munkakönyvtárban, és futtassa a következő parancsot a felhőből az eszközre irányuló üzenetek küldéséhez:
python SendCloudToDeviceMessage.py
Jegyezze fel az eszköz által fogadott üzeneteket.
Következő lépések
Ebben a cikkben megtanulta, hogyan küldhet és fogadhat felhőből eszközre irányuló üzeneteket.
Ha többet szeretne megtudni a felhőből az eszközre irányuló üzenetekről, olvassa el A felhőből az eszközre irányuló üzenetek küldése IoT Hubról című témakört.
Az IoT Hub üzenetformátumokkal kapcsolatos további információkért lásd: IoT Hub üzenetek létrehozása és olvasása.