• Categories
    • Recent
    • Tags
    • Popular
    • Register
    • Login

    MQTT sample setup on ESP8266

    Scheduled Pinned Locked Moved MyControllerDevice (ESP8266)
    29 Posts 5 Posters 24.8k Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R Offline
      ragflyer
      last edited by ragflyer

      Being new to this stuff it is sometimes hard to find all the necessary info, so I would like to provide you with a sample and hope it eases your way to experimenting with this cool project.

      We will connect a sample sketch from the PubSubClient library for ESP8266 to MyController through MQTT.

      Tested on SNAPSHOT, find it here

      1. Activate the MQTT broker on your MyController
        Settings -> MQTT broker -> Status Enabled
        I prefer to allow anonymous in the beginning to eliminate one source of errors.

      0_1479144062154_Bildschirmfoto 2016-11-14 um 18.19.55.png

      1. Add MQTT gateway :
        Resources -> Gateway -> Add gateway.
        You can use mostly default values, important is Network Type, Type and the correct direction of your topics: mygateway-out is where your sensors should post data, mygateway-in is what your client should subscribe to get changes from MyController (e.g. a relay).

      0_1479161074792_Bildschirmfoto 2016-11-14 um 18.35.26.png

      1. Install PubSubClient library in Arduino IDE
        Sketch Menu -> Include Libraries -> Manage Libraries

      2. Open ESP8266 Example
        File -> Examples -> PubSubClient -> mqtt_esp8266

      3. Save it in your own project path

      4. Edit SSID, Password in your sketch and set mqtt_server constant to the IP of your MyController MQTT broker

      5. Now the fun part: MyController can accept MQTT messages in MySensors format. The API is described at Serial API 2.0
        For your sketch this means you need to publish into topics following this format, e.g.:

        #define temperature_topic "mygateway-out/7/0/1/0/0"

      Here MyConroller subscribes to mygateway-out and will interpret:
      /5: Node ID 5
      /0: Child sensor ID 0
      /1: Message type 'set'
      /0: ack-parameter: Normal message
      /0: Sub-type: V_TEMP

      So add the #define in your sketch e.g. after the #includes and go to line 100 where client.publish is called:

      client.publish("outTopic","hello world");

      change this to use your topic from above and post a temperature of whatever degrees:

      client.publish(temperature_topic,"10.50");

      Compile and run the sketch

      1. Monitor incoming messages
        Status -> Resources logs
        Now you should see incoming temperature messages with 10.50 degrees.

      0_1479161892596_Bildschirmfoto 2016-11-14 um 23.15.23.png

      The sensor resource should be created automatically.

      Now if you want to control a relay for example, you create that sensor (actually actuator) and in your sketch do a client.subscribe("mygateway-in/<NodeID>/<ChildID>/1/0/<Sub-type>");
      I sometimes got the mygateway-in/out switched accidentally, you will see nothing on the logs, so double-check!

      Thanks to Jeeva for this great piece of software and untiring support!

      EDIT:
      Two quotes from jkandasa that might be helpful:

      Mycontroller format is described here: https://github.com/mycontroller-org/mycontroller/blob/development/modules/core/src/main/java/org/mycontroller/standalone/provider/mc/McpRawMessage.java#L81

      When you set this line <logger level="DEBUG" name="org.mycontroller.standalone.gateway.mqtt" /> on conf/logback.xml you can see MQTT debug logs.

      jkandasaJ 1 Reply Last reply Reply Quote 1
      • jkandasaJ Offline
        jkandasa @ragflyer
        last edited by

        @ragflyer Thank you for the great tutorial! I have created MyController direct support ESP8266 available here. Using this even you can update your ESP8266 Firmware from MyController. For now sample code is available here.

        R 1 Reply Last reply Reply Quote 0
        • R Offline
          ragflyer @jkandasa
          last edited by

          @jkandasa Awesome. I've been trying your sample, but where do you define ssid and password?
          For now I've set it up through the web interface of the node, but then I cannot find where the serial output is coming from, especially where the topic "in_3/ESP_0F..." is defined? It seems like none of the files contains this...
          Finally I need to set up a gateway type MyController correct? Probably I need to use a different port if the MQTT gateway should be running alongside?

          jkandasaJ 1 Reply Last reply Reply Quote 0
          • jkandasaJ Offline
            jkandasa @ragflyer
            last edited by

            @ragflyer

            Yes, you have to configure Node via configuration GUI from node(Connect to SSID of your node and enter http://192.168.4.1 on your browser). And you have to specify Feed id field which is used on MQTT topic and subscription.

            in_3/ESP_0F.. looks like you have configured 3 as feed id, In MyController you have to create MQTT gateway entry with the following settings,

            0_1479258392079_upload-88bb6645-f24a-411c-95c4-483c17757951

            jkandasaJ R 2 Replies Last reply Reply Quote 0
            • jkandasaJ Offline
              jkandasa @jkandasa
              last edited by

              @ragflyer Current SNAPSHOT build needs ESP driver update from here

              1 Reply Last reply Reply Quote 0
              • R Offline
                ragflyer @jkandasa
                last edited by

                @jkandasa OK, how do you change the node config once it is saved? Uploading the sketch does not set it back to AP mode 😞

                jkandasaJ 1 Reply Last reply Reply Quote 0
                • jkandasaJ Offline
                  jkandasa @ragflyer
                  last edited by

                  @ragflyer said:

                  OK, how do you change the node config once it is saved? Uploading the sketch does not set it back to AP mode

                  Node config will be stored on EEPROM. When you update firmware. No need to change node config. However when you want to change node config, just trigger Erase configuration from GUI (Resources >> Nodes >> Select your node >> Erase configuration). Now you will get AP on the name/ssid of ESP device and configuration url http://192.168.4.1

                  R 1 Reply Last reply Reply Quote 0
                  • R Offline
                    ragflyer @jkandasa
                    last edited by

                    Nice it works, thanks for pointing this out!

                    Few more things that might be helpful for newcomers:

                    • If you misconfigured so far that no connection to MyController is possible, the above "Erase configuration" obviously won't work. Load the example sketch for eeprom_clear and upload it, then upload your MyControllerDevice sketch again, connect to the ESP SSID and rerun configuration at http://192.168.4.1

                    • Feed ID will not take more than 6 characters

                    • You cannot set up a second gateway at say :1884 if you configured the broker to run at :1883. But it seems to be ok to define several Gateways with different topics on the same port (so you don't have to migrate existing nodes to another topic now).

                    1 Reply Last reply Reply Quote 1
                    • jkandasaJ Offline
                      jkandasa
                      last edited by

                      @ragflyer said:

                      Few more things that might be helpful for newcomers:

                      Thanks for the nice points!!

                      If you misconfigured so far that no connection to MyController is possible, the above "Erase configuration" obviously won't work. Load the example sketch for eeprom_clear and upload it, then upload your MyControllerDevice sketch again, connect to the ESP SSID and rerun configuration at http://192.168.4.1

                      Yes, We have to configure a PIN on ESP8266 to do force reset from device side. We have an option for this, actual code is here. But I never tested.

                      Feed ID will not take more than 6 characters

                      Yes, This is limitation, to limit topic length.

                      You cannot set up a second gateway at say :1884 if you configured the broker to run at :1883. But it seems to be ok to define several Gateways with different topics on the same port (so you don't have to migrate existing nodes to another topic now).

                      But for ESP8266 device you no need to configure more than one gateway. You can use same feed id across on all devices. MyController specific protocol born to support all the ESP devices from single gateway.

                      1 Reply Last reply Reply Quote 0
                      • P Offline
                        paul
                        last edited by paul

                        I have been using this set up with 5 esp8266 sensors from https://www.wemos.cc/. Tested even the update firmware OTA. 😃 working great.

                        Just remember to Change MQTT_MAX_PACKET_SIZE to 512 bytes on PubSubClient.h to allow for OTA

                        N 1 Reply Last reply Reply Quote 1
                        • N Offline
                          njbuch @paul
                          last edited by

                          @paul Hi Paul, can you share you code, I am having problems with the Wemos D1 Mini boards, and also would like some inspiration to my code. Thanks!

                          1 Reply Last reply Reply Quote 0
                          • Stephan35S Offline
                            Stephan35
                            last edited by

                            Hello,
                            I also use ESP8266 (ESP07 & ESP12F & WEMO)

                            Now i tried to send MQTT with MQTTBOX to see what happened .... arhh nothing 😢

                            0_1487281359459_Capture d’écran_2017-02-16_22-41-25.png

                            0_1487281366319_Capture d’écran_2017-02-16_22-41-42.png

                            0_1487281376279_Capture d’écran_2017-02-16_22-42-12.png

                            Have you any fully list of MQTT order to easy way write my arduino sample ?

                            Thanks

                            Best regards

                            1 Reply Last reply Reply Quote 0
                            • Stephan35S Offline
                              Stephan35
                              last edited by

                              Another thing , Should i have a MQTT Password ?
                              Because i use MQTT with another gateway (Domoticz) , i would like to keep it in this way.
                              Thanks.

                              jkandasaJ 1 Reply Last reply Reply Quote 0
                              • jkandasaJ Offline
                                jkandasa @Stephan35
                                last edited by

                                @Stephan35 MQTT password is optional.
                                Right now MyController gives direct support for ESP devices. you can have a look on https://github.com/mycontroller-org/MyControllerDevice

                                1 Reply Last reply Reply Quote 0
                                • Stephan35S Offline
                                  Stephan35
                                  last edited by

                                  Hello, i send an issue on GitHub,
                                  ESP does not take good AP , take old one. ... ❓

                                  thanks

                                  jkandasaJ 1 Reply Last reply Reply Quote 0
                                  • jkandasaJ Offline
                                    jkandasa @Stephan35
                                    last edited by

                                    @Stephan35 Hope issue addressed on GitHub

                                    1 Reply Last reply Reply Quote 0
                                    • Stephan35S Offline
                                      Stephan35
                                      last edited by Stephan35

                                      Right, Now two other things ...
                                      First i try autodetect MQTT server, but failed .

                                      Now ESP disapear from wifi, so i can't access to ESP .

                                      So, is there any special parameter to set MQTT as autodiscover ?

                                      How can i change ESP parameter, i tried to flash it again, but keep parameter in memory.

                                      thanks

                                      • esp reset after one hour of waiting ... lost memory ?

                                      C[I]: Configuration(NodeEUI:[ESP_8C0125], Mqtt{mDNS-status:[1], Server:[0.0.0.0], Port:[0], FeedId:[esp], User:[]})
                                      MC[I]: MQTT settings(Broker:[0.0.0.0], Port:[0])
                                      MC[I]: MQTT authenticating as anonymous
                                      MC[I]: MQTT connection failed, rc=-2
                                      MC[I]: MQTT failed! Retryting to connect...
                                      MC[I]: Sending mDNS query[_mc_mqtt._tcp]...
                                      Skipping compressed pointer

                                      Soft WDT reset

                                      ctx: sys
                                      sp: 3ffffa60 end: 3fffffb0 offset: 01b0

                                      stack>>>
                                      3ffffc10: 402079e1 3ffffe20 3fff01c0 402079d6
                                      3ffffc20: 61636f6c a48a006c 58540d4b 43076fd5
                                      3ffffc30: 68965955 4e5f233f 58a15990 8cecc38a
                                      3ffffc40: 36deb08a bd6b9bdb 358e7912 cbe029c8
                                      3ffffc50: 1d343e93 7d7369fe 0896a8c6 4a9ff10c
                                      3ffffc60: 863b39b9 6ff1395e 7f7e23b7 32d5f369
                                      3ffffc70: e209547c 6d3c8869 38895b9a 912fb242
                                      3ffffc80: 00000005 00000000 00000020 40101d0e
                                      3ffffc90: 3ffe9e25 40104feb 3ffed8b0 ffffffff
                                      3ffffca0: 40102a21 3ffed8b0 00000008 05b7eda3
                                      3ffffcb0: 00000017 3f7c5564 3ffee29c 40102bb0
                                      3ffffcc0: 3ffea6d0 00000000 00000000 3ffedf70
                                      3ffffcd0: 00000000 3f7c5564 40102fee 00000100
                                      3ffffce0: 7fffffff 3ffea6d0 3ffea6d0 00000001
                                      3ffffcf0: 00000001 401041df 3ffedfa0 00000000
                                      3ffffd00: 40104642 3f7c5564 00000000 4000050c
                                      3ffffd10: 3fffc278 40102d88 3fffc200 c0000022
                                      3ffffd20: 7674780c 3d737265 70720c31 7070693d
                                      3ffffd30: 6972702f 6e05746e 3d65746f 6f747108
                                      3ffffd40: 3d6c6174 72700b31 69726f69 313d7974
                                      3ffffd50: 79741635 6e61433d 4d206e6f 30353347
                                      3ffffd60: 65732030 73656972 6f72701d 74637564
                                      3ffffd70: 6143283d 206e6f6e 3533474d 73203030
                                      3ffffd80: 65697265 70312973 613d6c64 696c7070
                                      3ffffd90: 69746163 6f2f6e6f 74657463 7274732d
                                      3ffffda0: 2c6d6165 67616d69 72752f65 6d692c66
                                      3ffffdb0: 2f656761 6765706a 6d646137 72756e69
                                      3ffffdc0: 74683d6c 2f3a7074 3732342f 30324543
                                      3ffffdd0: 30303030 6f6c2e30 2e6c6163 646e692f
                                      3ffffde0: 682e7865 3f6c6d74 45474150 5041415f
                                      3ffffdf0: 6273750d 47464d5f 6e61433d 75156e6f
                                      3ffffe00: 4d5f6273 4d3d4c44 30353347 65732030
                                      3ffffe10: 73656972 6273750b 444d435f 4652553d
                                      3ffffe20: 49555529 30303d44 30303030 302d3030
                                      3ffffe30: 2d303030 30303031 3030382d 32342d30
                                      3ffffe40: 32454337 30303030 55003030 563d4652
                                      3ffffe50: 2c332e31 2c315043 2d345150 53522c35
                                      3ffffe60: 2c303036 42475253 a8c03432 424f0c0a
                                      3ffffe70: 464f2c32 00000001 00000277 0000fffe
                                      3ffffe80: 0000000c 4408543d 656c7075 06543d78
                                      3ffffe90: 6e616353 4605543d 463d7861 70615011
                                      3ffffea0: 614d7265 656c3d78 2d6c6167 6b1c3441
                                      3ffffeb0: 3d646e69 75636f64 746e656d 766e652c
                                      3ffffec0: 706f6c65 68702c65 156f746f 3d63616d
                                      3ffffed0: 313a3036 42383a32 3a32343a 453a4337
                                      3ffffee0: 00001432 00000000 3ffead68 3fff1c54
                                      3ffffef0: 000000e0 3fffdc80 3fff2194 401074a0
                                      3fffff00: 40220000 00000000 3ffeba21 3fff1c50
                                      3fffff10: 3ffead68 3fff1c54 3fff1ce4 4022e70c
                                      3fffff20: 00000002 3fff2114 3fff2114 3ffee9d0
                                      3fffff30: 00000000 3fff1ce4 0000001c 3fff2114
                                      3fffff40: 3ffead5a 00000000 3fff1ce4 4022db15
                                      3fffff50: 0c0aa8c0 000002a8 00000000 0000003b
                                      3fffff60: 00000002 00000018 4020e23b 3ffed888
                                      3fffff70: 3ffead34 3fffdcc0 3ffe9ee0 3ffe9ee0
                                      3fffff80: 4020e1ae 3ffed888 00000000 3fff219c
                                      3fffff90: 3fffdc80 00000000 3fff1ce4 402224a7
                                      3fffffa0: 40000f49 3fffdab0 3fffdab0 40000f49
                                      <<<stack<<<

                                      ets Jan 8 2013,rst cause:2, boot mode:(1,6)

                                      ets Jan 8 2013,rst cause:4, boot mode:(1,6)

                                      wdt reset

                                      jkandasaJ 1 Reply Last reply Reply Quote 0
                                      • Stephan35S Offline
                                        Stephan35
                                        last edited by

                                        Tried this :

                                        #define FACTORY_RESET_PIN 4
                                        #define FACTORY_RESET_PIN_STATE 4
                                        #define FACTORY_RESET_TIME 1000*1 //hold the button 9 seconds

                                        No success , still no AP .

                                        1 Reply Last reply Reply Quote 0
                                        • Stephan35S Offline
                                          Stephan35
                                          last edited by

                                          Again me ,
                                          Is it possible to test MQTT to mycontroller without ESP ?
                                          Can you give me, please, some MQTT order example to understand what is wrong.
                                          MQTT works fine , made some test with domoticz implemented on the same server.
                                          Thanks.

                                          1 Reply Last reply Reply Quote 0
                                          • jkandasaJ Offline
                                            jkandasa @Stephan35
                                            last edited by

                                            @Stephan35 said:

                                            First i try autodetect MQTT server, but failed .

                                            On MyController server your have to enable mcc.mdns.service.enable=true on mycontroller.properties and stop and start.

                                            #define FACTORY_RESET_PIN 4
                                            #define FACTORY_RESET_PIN_STATE 4
                                            #define FACTORY_RESET_TIME 1000*1 //hold the button 9 seconds

                                            No success , still no AP .

                                            FACTORY_RESET_PIN_STATE should be either 0 or 1. When you press the button, If your pin(FACTORY_RESET_PIN) connects on GND, Then you have to enter 0, otherwise 1.

                                            MC[I]: Sending mDNS query[_mc_mqtt._tcp]...
                                            Skipping compressed pointer

                                            Yes, Sometimes I see this error when we use mDNS enabled on ESP device. This error happens on mDNS library.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            0

                                            Online

                                            587

                                            Users

                                            529

                                            Topics

                                            3.4k

                                            Posts
                                            Copyright © 2015-2025 MyController.org | Contributors | Localization