I am working on a home automation project which required I installed Mosquitto, an open source MQTT broker, on my Raspberry Pi. Installation went smoothly, so a few minutes after first hearing about Mosquitto it was ready to be used on my RPi.
Next, I tested it by subscribing to topics and publishing messages from different SSH sessions, all without a problem.
When I configured my ESP8266 to communicate with this Mosquitto broker, it could not connect to it. Interestingly, my ESP8266 could successfully communicate a test broker on the internet at test.mosquitto.org. This was really weird, as usually stuff works locally and migrating to the internet things tend to break, not the other way around.
Looking through the logs I found the following errors:
May 12 12:01:47 dev mosquitto: New connection from 192.168.1.141.
May 12 12:01:47 dev mosquitto: Invalid protocol “MQTT” in CONNECT from 192.168.1.141.
A quick research on the internet revealed that I am not the only one with this problem, and that the root of the problem is that the version of Mosquitto that’s in the debian wheezy repositories is not compatible with the version the ESP8266 uses.
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key add mosquitto-repo.gpg.key
sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
sudo apt-get update
To display what version of Mosquitto is installed you can use the following:
sudo apt-cache search mosquitto
As soon as I restarted mosquitto the ESP8266 could connect to it with no problem.
Now the logs contain much friendlier messages:
May 12 19:05:37 dev mosquitto: New connection from 192.168.1.141 on port 1883.
May 12 19:05:37 dev mosquitto: New client connected from 192.168.1.141 as viktak (c1, k60).