void sendMQTTMessage(const char *topic,const char *payload)
{
    bool result = mqttClient.publish(topic, payload, false);
}

bool mqttReconnect()
{
    int MQTT_RECONNECT_RETRIES = 0;

    while (!mqttClient.connected() && MQTT_RECONNECT_RETRIES < MQTT_MAX_RECONNECT_TRIES)
    {
        MQTT_RECONNECT_RETRIES++;

        if (mqttClient.connect(HOSTNAME, MQTT_USER, MQTT_PASS))
        {
            char *message = new char[16 + strlen(HOSTNAME) + 1];
            strcpy(message, "p1 meter alive: ");
            strcat(message, HOSTNAME);
            mqttClient.publish("sensors/power/p1meter/status", message);
        }
        else
        {
            delay(5000);
        }
    }

    if (MQTT_RECONNECT_RETRIES >= MQTT_MAX_RECONNECT_TRIES)
    {
        return false;
    }

    return true;
}

void sendMetric(String name, String metric)
{
    //if (metric > 0)
    //{
        //char output[10];
        //ltoa(metric, output, sizeof(output));

        String topic = String(MQTT_ROOT_TOPIC) + "/" + name;
        sendMQTTMessage(topic.c_str(), metric.c_str());
    //}
}

void sendDataToBroker()
{
    String Metric="";
      for ( int i = 0; i < 7; i++)
      {
        if ( i != 4)
        {
        char output[10];
        ltoa(telegramObjects[i].value, output, sizeof(output));
        String Str_Data(output);
        ( i == 0 ) ? Metric = Str_Data : Metric = Metric + ";" + Str_Data;
        }
      }
      
      sendMetric("KWH_Metric", Metric );
      char output[10];
      ltoa(telegramObjects[4].value, output, sizeof(output));
      String Str_Gas(output);
      sendMetric("Gas_Metric", Str_Gas );
}