2016-02-17 4 views
1

Я хочу подключиться к Azure Iot Hub, с Python MQTT.Подключение Python MQTT к концентратору Azure Iot

Имя пользователя и знак SAS требуется от Iot Hub. Это мой код:

import paho.mqtt.client as mqtt 

def on_connect(client, userdata, flags, rc): 
    print("Connected with result code "+str(rc)) 
    client.subscribe("$SYS/#") 

def on_message(client, userdata, msg): 
    print(msg.topic+" "+str(msg.payload)) 

client = mqtt.Client() 
client.on_connect = on_connect 
client.on_message = on_message 

client.username_pw_set("myHub.azure-devices.net/device1", "mySASToken") 

client.connect("myHub.azure-devices.net", 1883, 60) 

client.loop_forever() 

Но после запуска на некоторое время, это исключение:

TimeoutError: [WinError 10060] Попытка подключения не удалась, поскольку подключенная сторона не ответила после периода время или установленное соединение не удалось, так как подключенный хост не смог ответить

Знает ли кто-нибудь, почему я не могу подключиться к концентратору Iot?

+0

ли это, безусловно, использует порт 1883, а не порт 8883 (который является TLS версия)? – ralight

ответ

-1

Ссылаясь на https://azure.microsoft.com/en-gb/documentation/articles/iot-hub-sdks-summary/ Azure IoT SDK не содержит Pyhon «еще». Это уже вызвано другими клиентами в https://feedback.azure.com/forums/321918-azure-iot. (Прямая ссылка: https://feedback.azure.com/forums/321918-azure-iot/suggestions/10522101-add-python-client-sdk).

+1

Это правда, на данный момент нет SDK Python. Но должно быть возможно отправить сообщение в Iot Hub с Python, напрямую используя протокол MQTT. – BlueCastle

2

Как сказал @FarukCelik, для Python не было Azure IoT SDK.

Однако, по моему опыту, я думаю, что существует четыре практических способа использования существующего SDK для Azure IoTHub в Python.

  1. Используя Azure IoT SDK для C для расширения Python, вы можете попробовать обратиться к https://docs.python.org/2/extending/extending.html для его реализации.
  2. Используя Azure IoT SDK для Java как импортированный пакет Jython, вы можете попытаться обратиться к http://www.jython.org/jythonbook/en/1.0/JythonAndJavaIntegration.html, чтобы узнать, как это сделать.
  3. Аналогично второму способу интеграции IronPython с Azure IoT SDK для C# /. Net, обратитесь к http://ironpython.net/documentation/dotnet/.
  4. Лазурный IoT SDK для NodeJS поддержки MQTT с помощью того же проекта Eclipse, Paho для JavaScript Client, так что я думаю, что вы можете попробовать обратиться к исходному коду Azure NodeJS IoT SDK on GitHub, чтобы знать, как правильно с помощью paho Python client для Azure IoTHub.

Между тем, существует неоперабельная библиотека Python для Azure IoTHub Device на GitHub https://github.com/bechynsky/AzureIoTDeviceClientPY. Что вы можете касаться этого репозитория проекта, но до сих пор он находится на стадии разработки.

Надеюсь, это поможет. С наилучшими пожеланиями.

+0

Благодарим вас за ответ с полезным ответом. Я пойду и посмотрю на Ironpython. – BlueCastle

3

Существует в настоящее время официальный Python SDK для подключения устройств к Azure IoT Hub: https://github.com/Azure/azure-iot-sdks/tree/master/python/device

This sample показывает, как подключиться, используя протокол MQTT.

В принципе, вот как это работает:

  1. создать клиентское устройство и определяет MQTT для протокола
  2. установить функцию обратного вызова, которая будет вызываться при получении сообщения
  3. использовать send_event_async для отправки сообщений к вашему экземпляру концентратора Azure IoT.
from iothub_client import * 

def send_confirmation_callback(message, result, userContext): 
    print "Confirmation[%d] received for message with result = %s" % (userContext, result) 

def receive_message_callback(message, counter): 
    buffer = message.get_bytearray() 
    size = len(buffer) 
    print "Received Message" 
    print " Data: <<<%s>>> & Size=%d" % (buffer[:size], size) 
    return IoTHubMessageDispositionResult.ACCEPTED 

iotHubClient = IoTHubClient(connectionString, IoTHubTransportProvider.MQTT) 
iotHubClient.set_message_callback(receive_message_callback, 0) 
iotHubClient.send_event_async(message, send_confirmation_callback, 0) 
+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/11937174) – Suever

+0

благодарит за отзыв. Я добавил суть кода. –

0

Вот как использовать PAHO (mosquitto) для подключения к Azure IoT Hub по стандартному MQTT:

from paho.mqtt import client as mqtt 


def on_connect(client, userdata, flags, rc): 
    print "Connected with result code: %s" % rc 
    client.subscribe("devices/<YOUR DEVICE ID>/messages/devicebound/#") 


def on_disconnect(client, userdata, rc): 
    print "Disconnected with result code: %s" % rc 


def on_message(client, userdata, msg): 
    print " - ".join((msg.topic, str(msg.payload))) 
    # Do this only if you want to send a reply message every time you receive one 
    client.publish("devices/<YOUR DEVICE ID>/messages/events", "REPLY", qos=1) 


def on_publish(client, userdata, mid): 
    print "Sent message" 


client = mqtt.Client(cleint_id=<YOUR DEVICE ID>, protocol=mqtt.MQTTv311) 
client.on_connect = on_connect 
client.on_disconnect = on_disconnect 
client.on_message = on_message 
client.on_publish = on_publish 
client.username_pw_set(username="<YOUR NAMESPACE>.azure-devices.net/<YOUR DEVICE ID>", 
         password="<YOUR SHARED ACCESS SIGNATURE FOR THE DEVICE>") 
client.tls_insecure_set(True) # You can also set the proper certificate using client.tls_set() 
client.connect("<YOUR NAMESPACE>.azure-devices.net", port=8883) 
client.loop_forever() 

 Смежные вопросы

  • Нет связанных вопросов^_^