веб-сервисы Amazon — клиент Mosquito C ++ не отправляет данные в aws iot

Я создал простое приложение на языке c ++ для отправки данных из малины в канал IoT AWS. Я никогда не получал сообщения от темы, где малина публикует данные.
Код следующий:

int main(int argc, char* argv[]) {
int res = 0;
NRMKMqttWrapper * mqttHdl;
mqttHdl = new NRMKMqttWrapper("clientid1");
res = mqttHdl->tls_opts_set(1, "tlsv1.2", NULL);
std::cout<<"tls_opts_set response: "<<res<<::std::endl;
std::cout<<"Initialize tls"<<std::endl;
res = mqttHdl->tls_set("tls/ca/Public-Primary-Certification-Authority-G5.pem", NULL, "tls/xxxx-certificate.pem", "tls/xxxx-private.pem", NULL);
std::cout<<"TLS set certificate response: "<<res<<::std::endl;
res = mqttHdl->connect("xxxx.iot.eu-west-1.amazonaws.com", 8883);
std::cout<<"Connect response: "<<res<<std::endl;
std::cout<<"Connection estabilished"<<std::endl;
while(1) {
auto tstr = "Hello world, this is a enode from mqtt";
mqttHdl->publish(NULL, "enode/data", strlen(tstr), tstr);
std::cout<<"Message sent"<<std::endl;
std::cout<<"Response of publish is: "<<res<<std::endl;
res = mqttHdl->loop();            // Keep MQTT connection
std::cout<<"Response of loop is: "<<res<<std::endl;
if (res)
mqttHdl->reconnect();
sleep(5);
}
return 0;
}

NRMKMqttWrapper.cpp

NRMKMqttWrapper::NRMKMqttWrapper(const char *id) : mosquittopp(id)
{
mosqpp::lib_init();         // Initialize libmosquitto
std::cout<<"Lib initialized"<<std::endl;
//int keepalive = 120; // seconds
//connect(host, port, keepalive);       // Connect to MQTT Broker
}

void NRMKMqttWrapper::on_connect(int rc)
{
std::cout<<"Connected with code "<<rc<<std::endl;;
if (rc == 0)
{
subscribe(NULL, "command/IGot");
}
}

void NRMKMqttWrapper::on_subcribe(int mid, int qos_count, const int *granted_qos)
{
std::cout<<"Subscription succeeded."<<std::endl;
}

void NRMKMqttWrapper::on_message(const struct mosquitto_message *message)
{
std::cout<<(const char *)message->payload<<std::endl;

}

Когда он входит в цикл, он печатает некоторое время 0, так как я понимаю, что вынужден возвращать 0 в первый раз, затем он возвращает код 7 (соединение потеряно), он восстанавливает соединение и теряет соединение в следующем цикле.
Но если я запускаю команду из консоли, используя mosquitto_pub он отлично работает, и я получаю сообщение от малины.

mosquitto_pub --cafile tls/ca/Public-Primary-Certification-Authority-G5.pem --cert tls/xxxx-certificate.pem --key tls/xxxx-private.pem -h xxxx.iot.eu-west-1.amazonaws.com -p 8883 -q 1 -d -t "enode/data" -i clientid1 -m "Hello World"

Любое предложение?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …