Simple MQTT Tutorial
-
I found the error. The port is wrong.
It should be: 1883.
Then connect is working.
-
@MrPy Are you sure those are you messages? I checked and somebody else was publishing these messages.
-
My code is as following:
import time
import machine
from umqtt import MQTTClientdef settimeout(duration): pass
def connect():
if machine.reset_cause() != machine.SOFT_RESET:
client = MQTTClient("MyLoPy", "broker.mqttdashboard.com", port=8000)
client.settimeout = settimeout
client.connect()
print('Connected MQTT Broker.')
return clientdef send(client):
while True:
print("Sending ON")
client.publish("/lopy", "ON")
time.sleep(1)
print("Sending OFF")
client.publish("/lopy", "OFF")
time.sleep(1)I do a connect() and the result is as following:
client.connect()
0xc b'10:12:00:04:4d:51:54:54:04:02:00:00'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "umqtt.py", line 86, in connect
IndexError: bytes index out of rangeStill going wrong. What could be the solution?
-
@gertjanvanhethof Hi!, try with machine.reset(), then try your code one more time, you need only one client socket, when you try few times the code, I think the socket doesn't work fine. That is the way to solve the same problem in my tests, but I don't know the reason.
-
@MainSheet I'am not able to connect.
What do I wrong?In my main.py I setup the wifi connection successfully.
I checked that by doing an http get call and I was able to get HTML data from a website. So internet connection is working.I went to: http://www.hivemq.com/demos/websocket-client/
And created a connection with the following details:
Host: broker.hivemq.com
Port: 8000
ClientID: MyLoPyI created a subscription and tested some messages. All works.
Then I typed the following commands on my LoPy:
MicroPython v1.8.6-40-gd10463e on 2016-11-25; LoPy with ESP32
Type "help()" for more information.from umqtt import MQTTClient
def settimeout(duration): pass
...client = MQTTClient("MyLoPy", "broker.hivemq.com", port=8000)
client.settimeout = settimeout
client.connect()
0xc b'10:12:00:04:4d:51:54:54:04:02:00:00'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "umqtt.py", line 86, in connect
IndexError: bytes index out of range
-
@vruizvil
For Windows, I use MQTTFX Client. Here the link
http://www.jensd.de/apps/mqttfx/
-
@MainSheet said in Simple MQTT Tutorial:
Try client.disconnect(), then client.connect(). Try on firefox, it works fine in my tests, and try another topic (without slash), ie.: "mylopytopic"
-
Dummy question,
I have the code on my LoPy working :
from simple import MQTTClient import time def settimeout(duration): pass client = MQTTClient("MainSheet", "broker.hivemq.com", port=8000) client.settimeout = settimeout client.connect() while True: print("Sending ON") client.publish("/lights", "ON") time.sleep(1) print("Sending OFF") client.publish("/lights", "OFF") time.sleep(1)
output is this
connected with goofy, channel 1 Sending ON Sending OFF Sending ON Sending OFF Sending ON Sending OFF Sending ON Sending OFF Sending ON Sending OFF
Connecting to http://www.hivemq.com/demos/websocket-client/? with Chrome
Host = broker.hivemq.com
ClientID = MainSheet
Port = 8000. ( I tried setting the port to 1883 but then I can't connect to hivemq. I also tried to set the code above to connect to port 8000, however, got an out of range error)
subscribed to /lightshowever, the messages never get through to HiveMQ
Steve
-
Well, thanks a lot for the comments.
After uppgrade recent firmware, the code works fine connecting mosquitto broker.
But, I can't connect two differents sockets with two differentes brokers at same time.
It needs run .disconnect() function to be abel to use the other one broker.
I don't know the reason....., well, I'am not a python expert.# Initialize MQTT Client def settimeout(duration): pass def t3_publication(topic, msg): print (topic, ';', msg) pycom.rgbled(0xff00) UNIQUE_ID = machine.unique_id() MQTT_BROKER = "192.168.2.220" MQTT_PORT = 1883 mqtt_client = MQTTClient(UNIQUE_ID, MQTT_BROKER, port=MQTT_PORT) mqtt_client.settimeout = settimeout mqtt_client.set_callback(t3_publication) mqtt_client.connect() MQTT_BROKER_2 = "test.mosquitto.org" #MQTT_PORT = 1883 mqtt_client2 = MQTTClient(UNIQUE_ID, MQTT_BROKER_2, port=MQTT_PORT) mqtt_client2.settimeout = settimeout mqtt_client2.set_callback(t3_publication) mqtt_client2.connect()
-
@thibault My apologies, I was replying to vruizil below.
-
Sorry i don't speak very well english, so i hav'nt really understand what you says exactly. But i mean you want data about the different version
I have use the pycom_update_0.9.3.b2 on the lopy. And for the mosquitto the version is 1.3.4-2. I'm begin in the IoT world, and maybe i have too few knowledge in it for understand you. If i have not answer that you wait, feel good about explain another way.
-
Hmmm, do you have your Mosquito broker details to hand to i can test?
I usually have a node-red instance running that connects to my broker so i can quickly test if the broker is up or down. A few of these public test brokers are not that stable so 9/10 it's the broker being down that causes my issues.
-
My try was successful with this on debian:
https://pallavichaurasia94.wordpress.com/2014/10/14/mosquitto-in-debian/
for install MQTT brockers.On the lopy i use this initialisation:
from umqtt import MQTTClient def settimeout(duration): pass client = MQTTClient("joe", "192.168.4.2", port=1883) client.settimeout = settimeout client.connect()
that give me the possibility to publish fine on my brockers with the command:
client.publish("hello/world", "My publication")
I have make some try to basic read brocker's data from lopy, We need to define a function who have been called if message are find:
import pycom def t3_publication(topic, msg): print (topic, ':', msg) pycom.rgbled(0xff00)
and assign it:
client.set_callback(t3_publication)
now we can subscribe to the desired channel:
client.subscribe("hello/world", qos=1)
I put data to the MQTT brockers from another terminal (localhost from brocker's server)
mosquitto_pub -d -t hello/world -m "Hello, MQTT. This is my first message."
, and i launch the check of the brocker's message from lopy by:client.check_msg()
That's print message in channel, and set led to green (who's been reset by the heartbeat).
I hope that will help you.
-
The code works fine on my lopy (release 0.9.1.b1) to connect broker.hivemq.com, but it doesn't work to connect test.mosquitto.org. I have a mosquitto broker on local machine, but...... not working. Please, help about this issue. Thanks.