Repository navigation
cliente mqtt
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Nível: iniciante
Em uma frase: o TRALMQTTClient conecta a qualquer broker MQTT, assina tópicos e
publica mensagens, configurado no Object Inspector.
Você vai precisar: o pacote RALModuleMQTTPackage; para mqtts:// e wss://, a
OpenSSL ao lado do executável.
- Coloque um
TRALMQTTClient(paleta RAL - Client). - Em
BrokerURL, o endereço do broker:mqtt://test.mosquitto.org:1883,mqtts://meu-broker:8883ouws://meu-broker:8080/mqtt. - Clique com o botão direito no componente e escolha Testar conexão: aparece a versão aceita e o que o broker anunciou, ou o motivo da falha. O componente em si não é conectado pela IDE.
- Em
Subscriptions, adicione um item por filtro (casa/#), com oQoS.- Para ver o que chega sem código: ligue
MessagesControldo item a umTMemo,TListBoxouTComboBoxdo formulário.MessagesFormatescolhe só o conteúdo,tópico=conteúdoou com a hora;MessagesMaxCount(1000) limita a lista.
- Para ver o que chega sem código: ligue
- Em
Publications, adicione as mensagens que o programa manda (Name,Topic,Payload,QoS,Retain). NumTActionList, crie uma açãoTRALMQTTPublish, ligueCliente escolha a publicação emPublication; ligue a ação a um botão. -
Active := Trueconecta ao abrir o formulário. Ou use as açõesTRALMQTTConnecteTRALMQTTDisconnect.
Quer as mensagens num grid? Instale o RALModuleMQTTDBPackage, coloque um
TRALMQTTDataSetLink (paleta RAL - DAO), ligue Client, DataSet (um memtable
com campos Topic, Payload, QoS, Retain, Received, os que quiser) e, se
quiser só um filtro, Subscription. MaxRows (1000) limita as linhas.
procedure TForm1.FormCreate(Sender: TObject);
begin
RALMQTTClient1.BrokerURL := 'mqtt://localhost:1883';
RALMQTTClient1.Subscriptions.Add('casa/#', mqQoS1);
RALMQTTClient1.OnMessage := Chegou;
RALMQTTClient1.Connect; // espera o CONNACK; levanta ERALMQTTError se falhar
RALMQTTClient1.Publish('casa/sala/luz', 'ligada', mqQoS1, True);
end;
procedure TForm1.Chegou(Sender: TObject; AMessage: TRALMQTTMessage);
begin
Memo1.Lines.Add(AMessage.Topic + ' = ' + AMessage.AsString);
end;-
Publishnão espera: QoS 0 sai na hora; QoS 1 e 2 são gravados antes e enviados; o fim de cada um chega emOnPublished.PublishWaitespera a confirmação. - Há sobrecargas de
PublishcomTByteseTStream; a mensagem recebida temAsString,AsBytes,AsStream,AsJSONeSaveToFile. -
Mode:cmPublisher(não assina),cmSubscriber(recusa publicar) oucmBoth. - Os eventos rodam na thread principal (
SynchronizeEvents); num programa de console, na thread do cliente.
AutoReconnect (ligado) tenta de novo com espera crescente entre MinDelay e
MaxDelay; MaxAttempts 0 é sem limite. Com CleanStart False e SessionExpiry (um
dia, por padrão), o broker guarda as assinaturas e as mensagens enquanto você está
fora, e o cliente guarda as que você mandou e não foram confirmadas (SessionStore:
arquivo em SessionFolder, ou memória). O que você publica desconectado espera na
fila (OfflineQueueSize).
| sintoma | causa | o que fazer |
|---|---|---|
| "Not authorized" / "Bad user name or password" | o broker exige usuário |
UserName/Password ou um componente de autenticação (segurança) |
| conecta em 3.1.1 e não em 5.0 | broker antigo | deixe VersionFallback ligado, ou ProtocolVersion := mv311
|
mqtts:// falha com erro de certificado |
certificado autoassinado ou de outro nome |
SSL.Pins com a impressão digital, ou SSL.CAFile (segurança) |
| mensagens repetidas com QoS 1 | é o que QoS 1 promete ("pelo menos uma vez") | QoS 2, ou trate o repetido (rede ruim) |
Publish levanta em cmSubscriber
|
o Mode proíbe |
cmBoth |
- MQTT 🚧
- Broker MQTT 🚧
- Segurança no MQTT 🚧
- Rede ruim 🚧
Começar
Servidor
- Rotas e parâmetros
- Ler o pedido e responder
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- Servidor SOAP 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar