ESP32 Sensor -> MQTT -> Home Assistant

Hello folks.
I’m trying to setup the MQTT connection on ESP32 in C++, but without a luck. Not receiving any messages on the HASS side.
Device is connected to wifi and same network as the HASS
This comes from this cool project:

Could you please advise if there’s any issue with the below?
Thanks in advance.


#if HA_ENABLED == true

    #include <Arduino.h>
    #include <WiFiClientSecure.h>
    #include <MQTTClient.h>
    #include "../config/config.dist.h"

    WiFiClientSecure HA_net;
    MQTTClient HA_mqtt(1024);

    extern unsigned short measurements[];

    const char* PROGMEM HA_discovery_msg = "{"
            "\"name\":\"" DEVICE_NAME "\","
            "\"state_topic\":\"homeassistant/sensor/" DEVICE_NAME "/state\","
            "\"value_template\":\"{{ value_json.power}}\","
            "\"device\": {"
                "\"name\":\"" DEVICE_NAME "\","
                "\"identifiers\":[\"" DEVICE_NAME "\"]"

     * Established a connection to Home Assistant MQTT broker.
     * This task should run continously. It will check if an
     * MQTT connection is active and if so, will sleep for 1
     * minute. If not, a new connection will be established.
    void keepHAConnectionAlive(void * parameter){
            // When we are connected, loop the MQTT client and sleep for 0,5s
                vTaskDelay(250 / portTICK_PERIOD_MS);

                vTaskDelay(1000 / portTICK_PERIOD_MS);

            serial_println(F("[MQTT] Connecting to HA..."));
            HA_mqtt.begin(HA_ADDRESS, HA_PORT, HA_net);

            long startAttemptTime = millis();
            while (!HA_mqtt.connect(DEVICE_NAME, HA_USER, HA_PASSWORD) &&
                    millis() - startAttemptTime < MQTT_CONNECT_TIMEOUT)
                vTaskDelay(MQTT_CONNECT_DELAY / portTICK_PERIOD_MS);

                serial_println(F("[MQTT] HA connection failed. Waiting 30s.."));
                vTaskDelay(30000 / portTICK_PERIOD_MS);

            serial_println(F("[MQTT] HA Connected!"));

     * TASK: Every 15 minutes we send Home Assistant a discovery message
     *       so that the energy monitor shows up in the device registry.
    void HADiscovery(void * parameter){
                serial_println("[MQTT] HA: no MQTT connection.");
                vTaskDelay(30 * 1000 / portTICK_PERIOD_MS);

            serial_println("[MQTT] HA sending auto discovery");
            HA_mqtt.publish("homeassistant/sensor/" DEVICE_NAME "/config", HA_discovery_msg);
            vTaskDelay(15 * 60 * 1000 / portTICK_PERIOD_MS);

    void sendEnergyToHA(void * parameter){
        serial_println("[MQTT] Can't send to HA without MQTT. Abort.");

        char msg[30];
        strcpy(msg, "{\"power\":");
            strcat(msg, String(measurements[LOCAL_MEASUREMENTS-1]).c_str());
        strcat(msg, "}");

        serial_print("[MQTT] HA publish: ");

        HA_mqtt.publish("homeassistant/sensor/" DEVICE_NAME "/state", msg);

        // Task is done!

Is this your first MQTT-connected device in HA?

If yes, I’d suggest eating an elephant one bite at a time:

  1. Grab any ESP32 dev module
  2. Load a basic MQTT example that publishes something
  3. Go to HA, MQTT integration, and click Configuration
  4. In the section “Listen to a topic” input the topic from step 2 and click “Start listening”

If it works, you can be sure that the MQTT broker and integration in HA work correctly.

BTW, some time ago, I created quite a similar project: Power Monitoring |

Sure thing. Setup using ESP32, MQTT and Home Assistant - YouTube with Arduino IDE and EspMQTTClient, home assistant is getting them messages.

So it has to do with the code…from my original post…

bump. Anybody?

I was struggling with compilation as well.
Use this library as MQTT one:
[GitHub - 256dpi/arduino-mqtt: MQTT library for Arduino](https://working MQTTClient.h library)
for me it worked.

1 Like