Posso publicar vários tópicos do MQTT em uma única solicitação?


10

Eu tenho um dispositivo com vários sensores que publica cada sensor lendo separadamente para tópicos como

device1-id/sensor1-id = 10.2
device1-id/sensor2-id = 15.5
[...]

Nós o alimentamos na AWS IoT usando o Amazon AWS IoT SDK, ou seja,

mqtt_params.qos = QOS1;
mqtt_params.payload = payload;
mqtt_params.payloadLen = payload_len;
rc = aws_iot_mqtt_publish(&client, topic, topic_len, &mqtt_params);

Cada chamada gera um pacote TCP separado e uma resposta separada do AWS MQTT broker. O problema é que alguns de nossos nós estão em uma rede muito lenta e aguardam o ACK após cada pacote atrasar a publicação.

Existe alguma maneira de agrupar todas as leituras do sensor em um único pacote TCP, enquanto as publica em tópicos separados e mantém o QOS = 1?

Respostas:


7

Parece que o aws IoT sdk está usando uma publicação síncrona (como está usando um código de retorno), portanto está bloqueando para cada mensagem.

Não há nenhuma razão no nível do protocolo MQTT para que você não possa ter várias mensagens em andamento ao mesmo tempo, para que você possa usar o cliente assíncrono paho para que a espera na resposta QOS1 possa ser feita sem bloquear a publicação da próxima mensagem.

Outra opção seria publicar apenas uma mensagem composta com todos os valores do sensor de uma só vez e dividi-la no consumidor final.


11
Contanto que ele não esteja preocupado com o código de resposta. Se você receber uma não 200 OKresposta, isso significa que ambas as operações falharam? Apenas um? Se sim, qual?
Mawg diz que restabelece Monica

Você ainda pode verificar o código de retorno, basta compará-lo com o token retornado da publicação para saber a qual deles está relacionado.
hardillb

Mas, diferente de ASSINAR, não podemos configurar uma matriz de tópicos e suas mensagens correspondentes na mesma mensagem MQTT, certo?
Cogitoergosum
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.