💬 Building a MQTT Gateway

  • Admin

    This thread contains comments for the article "Building a MQTT Gateway" posted on MySensors.org.

  • Quick question.
    I have built GatewayW5100MQTTClient according to mysensors.
    It works and relays my nodes.
    However, my old gateway with MqTT delivered the messages with my selected prefix and then node/child number + variable/sensor.
    Ex MyMQTT/1/1/S_TEMP
    Now the new gateway with MqTT delivers node and child and more like this:
    MyMQTT/1/1/x/x/x where X is some number.
    It does not display S_TEMP.
    And what are the extra "numbers"?

    And it also displays when the node starts up some MqTT messages that are empty ex:
    MyMQTT/1/255/3/0/1 with no information.
    I do not know what publishes these..

    For relevance, the sketches I upload are the ones in the new mysensors library, ex Atmospheric Pressure Sensor.

  • Hardware Contributor

    The new MQTT gateway exposes the serial api to MQTT. It has less functionality.

    The old client gateway was a controller and translated the protocol to more readable messages and had a node-id handling.

    I had the same problem and switched to node-red with a serial gateway.

  • Admin

  • @FotoFieber

    How do you mean it is a problem? Everything works, just needed to know what the extra was 🙂
    I too use NODE RED, but just listening on MQTT and then putting the info into mysql databases.

    Thank you! I have used search, but it is difficult when you do not know what you are searching for 🙂 And all information about 2.0 is overwhelming at the time being for me.

  • Admin

    Thanks, good feedback @Nicklas-Starkel .

    I just updated the main MQTT page, moving some of the instructions from the forum.

  • Seems that the W5100 sketch of the MQTT gateway is missing #include <SPI.h>.
    I had to add it before #include <Ethernet.h>.

  • As Ernst79 already mentioned: please add #include <SPI.h> as a switch to your code, thank you!

  • Admin

  • Is it possible to have the MQTT client also act as a network gateway?

  • Admin

    Nope, sorry. You have to have to introduce a broker or controller acting as MQTT server.

  • The old network gateway with mqtt seems to be removed and the client version is the one that id preferred. Is it possible to have both mqtt server and network gateway in that version?

  • Sorry for my ignorance but I would like to know how to connect the gateway to the sensor.
    As I understand it, the radio communication is responsible for it, so can I put arduino + NRF24L01 + sensor at the other end?
    Thank you!

  • @DIM said:

    my ignorance but I would like to k

    The gateway is a arduino with NRF24L01+ (or RFM69) and serial/network/RS485 component. The sensor is another arduino with NRF24L01+ (or RFM69) and the sensor that are attached. The gateway is then acting as a translator from the NRF24L01+ (or RFM69) radiosignal to the medium that can talk to your controller

  • I thought that the gateway could be done only with the ESP8266 module.

  • If you're using an ESP8266 and you find it "SOFT WDT resetting" whenever a node tries to send a message, try moving the wire from GPIO4 to GPIO5 - There are a few esp12E boards which have been incorrectly screen printed - worked for me with this board!

  • Regarding ACK flag in MQTT.
    If a sensor sends data to the gateway, and it requests an ACK.
    It is the gateway that responds with an ACK, not the controller.

    How do one utilize the ACK flag in MQTT?
    Or rather, how do one get the ACK to display in a MQTT message?

    void receive(const MyMessage &message) {
    int value = debouncer.read();
    //We only expect one type of message from controller. But we better check anyway.
     if (message.isAck()) {
        Serial.println("This is an ack from gateway");

    Should I write a codesnippet like the above but one that sends a message back to the gateway, that the ACK was received?
    And also, if an ACK was not received that the sensor should try to send the message again.

  • I have set up an MQTT gateway running on a Wemos D1, and a motion sensor running on an arduino nano.

    It seems to work successfully, but I had to define MY_NODE_ID in the sensor sketch because the negotiation for this is done by the controller. Presumably, I'm going to have to program my controller to respond to the mqtt message being sent to negiotiate the id, but I cannot find any documentation on the correct reply. Does someone have a link?

    The mqtt message being sent to negotiate the node id was

    mygateway1-out/255/255/3/0/3 (null)

  • I believe the node id will always be 0 for gateways so the examples are a little misleading. For example the output shows connections with a node id of 2 (e.g. mygateway1-out/2/1/1/0/49 55.722519;13.018121;13)

  • Can this be used with RabbitMQ as broker?


Suggested Topics