2016-02-25 3 views
2

есть ли поддержка в питона, чтобы подписаться на MQTT брокера с портом 8080MQTT над WebSocket в питона

import sys 
import paho.mqtt.client as mqtt 

def on_connect(mqttc, obj, flags, rc): 
    print("rc: "+str(rc)) 

def on_message(mqttc, obj, msg): 
    print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload)) 

def on_publish(mqttc, obj, mid): 
    print("mid: "+str(mid)) 

def on_subscribe(mqttc, obj, mid, granted_qos): 
    print("Subscribed: "+str(mid)+" "+str(granted_qos)) 

def on_log(mqttc, obj, level, string): 
    print(string) 

mqttc = mqtt.Client() 
mqttc.on_message = on_message 
mqttc.on_connect = on_connect 
mqttc.on_publish = on_publish 
mqttc.on_subscribe = on_subscribe 
mqttc.connect("test.mosquitto.org", 8080, 60) 
mqttc.subscribe("test/iot", 0) 

mqttc.loop_forever() 

я не могу соединиться с этим кодом. Mosquitto имеет поддержку websocket на порту 8080, но эта библиотека paho не работает. любое решение для python? Я использую python 2.7 на окнах 10.

+0

Я думаю WebSocket является его собственный протокол, не такой же, как MQ, то есть (или использует) другой протокол, это как пытаясь сравнить яблоки и помидоры, он не работает, за исключением того, что они оба округлые (то есть оба являются протоколами на основе IP). Попробуйте порт 1883, который является незашифрованным MQTT. – barny

+0

Я пробовал, и он работал на 8080, но я хочу делать с 8080, поскольку брокер mosquitto имеет поддержку websocket на 8080, но эта библиотека не работает на 8080. –

+0

Какая выгода, по вашему мнению, заключается в запуске собственного клиента через веб-узлы? – hardillb

ответ

4

Модуль Pāho MQTT представил WebSocket поддерживает несколько дней назад. Я не думаю, что он выпущен еще, но вы можете установить его из мастера в подразделении Linux, используя

pip install git+git://github.com/eclipse/paho.mqtt.python.git 

Также работает под окнами. (Спасибо за информацию из комментариев)

Вы можете использовать WebSockets как транспорт, соединив с

mqttc = mqtt.Client(transport="websockets") 

UPDATE:

Если вы пытаетесь использовать протокол WebSocket с клиентом питона, потому что вам также необходимо подключить клиент браузера (например, MQTT.js), после чего вы также можете настроить mosquitto для прослушивания веб-сайтов и обычного протокола mqtt.

Просто создайте файл конфигурации, например, в

/etc/mosquitto/mosquitto.conf 

со следующим содержанием:

listener 1883 
protocol mqtt 

listener 9001 
protocol websockets 

Затем вы можете запустить mosquitto с

mosquitto -c /etc/mosquitto/mosquitto.conf 

Вы должны увидеть подобный вывод :

затем
1469015320: mosquitto version 1.4.8 (build date 2016-05-3112:07:40+0200) starting 
1469015320: Config loaded from /etc/mosquitto/mosquitto1.conf. 
1469015320: Opening ipv4 listen socket on port 1883. 
1469015320: Opening ipv6 listen socket on port 1883. 
1469015320: Opening websockets listen socket on port 9001. 

Ваш клиент питона подключается к порту 1883 и браузера клиента к 9001

Вы можете использовать what-mqtt browser client для проверки WebSocket слушателя. Просто укажите это на ws://localhost:9001

+0

По-прежнему не получаю мои сообщения ..... этот код позволяет мне подключиться к websocket, но я не получаю сообщения , –

+1

Работы по установке пива с окнами –

+0

@SmitGardhariya После прочтения комментариев по вашим вопросам, мне кажется, что вы хотите использовать веб-порты, потому что другому клиенту необходимо подключиться к mosquitto с помощью websockets. То, что я узнал, заключалось в том, что москит может слушать веб-сайты и обычные соединения mqtt. Вы можете добавить дополнительный прослушиватель в файл конфигурации: 'прослушиватель 9001 протокол websockets' – Fl0v0

1

Нет, версия библиотеки Paho для Python не поддерживает MQTT поверх Websockets.

На самом деле я считаю, что только родная сторона клиента (не в браузере) библиотека MQTT, которая поддерживает MQTT над WebSockets является модулем NodeJS (https://www.npmjs.com/package/mqtt)

+0

Я уже сделал это на Nodejs с библиотекой с именем «mows», которая является mqtt на websocket, но я хочу сделать это на python, поэтому любая идея у вас есть реализовать его на python? –

+0

Вы пробовали смотреть на _python mqtt websocket_? – barny

+0

yes barny, я сделал это, но я не могу найти что-нибудь полезное в google ... если у вас есть решение, тогда скажите мне –

2

Между февралем и сейчас исправлена ​​кодовая база paho.mqtt.python. Просто добавьте transport='websockets', как предложил Fl0v0, он просто работает. Ниже приведен полный код, который подписывается на все или все под $SYS/. Код испытания на главной ветви Зафиксировать хэш e56f913 на 3 июня 2016 года

#!/usr/bin/python 

import sys 
import paho.mqtt.client as mqtt 

def on_connect(mqttc, obj, flags, rc): 
    print("rc: "+str(rc)) 

def on_message(mqttc, obj, msg): 
    print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload)) 

def on_publish(mqttc, obj, mid): 
    print("mid: "+str(mid)) 

def on_subscribe(mqttc, obj, mid, granted_qos): 
    print("Subscribed: "+str(mid)+" "+str(granted_qos)) 

def on_log(mqttc, obj, level, string): 
    print(string) 

mqttc = mqtt.Client(transport='websockets') 
mqttc.on_message = on_message 
mqttc.on_connect = on_connect 
mqttc.on_publish = on_publish 
mqttc.on_subscribe = on_subscribe 

mqttc.connect("test.mosquitto.org", 8080, 60) 

mqttc.subscribe("#", 0) 
#mqttc.subscribe("$SYS/#", 0) 

mqttc.loop_forever() 

Update: Код выше не работает на Windows 7 с питоном 2.7.6, что я тестировал с путем вызова от одного версия Cygwin (но не cygwin python).Ни одна из тем "#" или "$SYS/#" не опубликовала ни одного опубликованного сообщения.

Вместо этого в качестве примера следует использовать паб или субтитра. Патч paho.mqtt.python examples/pub-single.py и examples/sub-simple.py. Затем запустите sub-simple.py в одном терминале. Запустите pub-single.py в другом терминале, дважды. Абонентский терминал распечатает два сообщения, опубликованные издателем.

Патч к examples/pub-single.py:

-publish.single("paho/test/single", "boo", hostname="test.mosquitto.org") 
+publish.single("/HelloWorld", "boo", hostname="test.mosquitto.org", 
+    port=8080, transport='websockets') 

Патч к examples/sub-simple.py:

-topics = ['#'] 
+topics = ['/HelloWorld'] 

-m = subscribe.simple(topics, hostname="iot.eclipse.org", retained=False, msg_count=2) 
+m = subscribe.simple(topics, hostname="test.mosquitto.org", 
+       retained=False, msg_count=2, 
+       port=8080, transport='websockets') 
+0

тем, как сам код paho реализовал протокол websocket. вам даже не нужно устанавливать пакет websocket. – minghua

+0

фиксация june 3 одна после тега v1.2. что намекает, что функция была добавлена ​​или исправлена ​​v1.2. предыдущий v1.1 был помечен 29 января 2016 года. – minghua

+0

Thnx minghua .... Я попробовал, но я до сих пор не получаю свои сообщения ..... этот код позволяет мне подключаться к websocket, но я не получаю сообщения. –