Abra o projeto do cliente MQTT no Delphi. Continuação
O início estava aqui: o protocolo MQTT e o projeto aberto do cliente MQTT no DelphiO projeto do cliente MQTT no Delphi foi complementado por um painel para monitorar o fluxo de informações da Internet das coisas em tempo real e por um gerador de publicação periódica para testar os agentes do MQTT. O formato JSON para transmissão de informações foi adotado, pois é o padrão para serviços de Internet.E também veja o que o IBM Bluemix pode nos oferecer para organizar o monitoramento remoto e gerenciar as coisas na Internet.Novidades
Depois que a versão anterior do cliente implementou a capacidade de receber, enviar e assinar pacotes MQTT, foi a vez de implementar a geração de fluxo de mensagens para testar a operação dos intermediários MQTT. Outra tarefa foi determinar a estrutura do corpo da mensagem. Aqui, um método de estruturação de informações usado no serviço IBM Bluemix IoTF foi usado para ajudar. Mesmo que a estruturação aplicada não seja ideal, há motivos para aderir a essas regras por um tempo, porque a IBM é uma marca muito autorizada.A estrutura neste contexto é como a informação é codificada em cada pacote e em qual composição é transmitida. É necessário decidir se transferimos por uma variável ou por grupos, se por grupos, como separar as variáveis, como distinguir entre variáveis, metadados e assim por diante, como comparar variáveis com sua descrição ou nomes e se, em todos os casos, as variáveis devem ser acompanhadas por nomes ou índices suficientes e etc. O protocolo MQTT não regula esse problema de forma alguma, exceto que os dados de texto são codificados no formato UTF8, o que, em princípio, também não é ruim, porque permite chamar tópicos em russo.Os gigantes da Internet escolheram o formato JSON para resolver o problema de estruturação, embora o MQTT tenha transferido silenciosamente o XML e o ASN.1 em qualquer codificação e outros formatos. O JSON, a propósito, tem várias especificações de compactação, se houver reclamações sobre a redundância do formato de texto.Geração de Tráfego MQTT
Portanto, agora nosso cliente pode enviar pacotes contendo dados de texto no formato JSON e codificados em UTF8. Para isso, possui a aba “Publicação Periódica”. Publicar na gíria do MQTT significa simplesmente enviar um pacote de dados para outros nós na rede IoT.
Na captura de tela, cada linha da tabela corresponde a uma mensagem específica. Todas as mensagens neste exemplo têm o mesmo tópico. Aqui a política é esta: quanto menos tópicos diferentes, menor o ônus do broker para analisar, pesquisar e salvar esses tópicos. Os tópicos são selecionados no formato em que são aceitos pelo serviço IBM Bluemix IoTF. A coluna Carga útil contém o corpo da mensagem. É apresentado no formato JSON, mas para uma variável é permitido usar o especificador de formato de acordo com as regras da função Format da linguagem Delphi. Nesse caso, o especificador% g é usado. Em seu lugar, será substituído o valor da variável gerada de acordo com as regras especificadas nas colunas: Tempo limite (período de envio da mensagem), Função (existe apenas uma opção entre uma variável aleatória e uma função senoidal), Min, Max (o valor mínimo e máximo do valor gerado),Período (período da função seno, especificado no número de amostras), Offs (deslocamento do argumento da função seno, especificado pelo número de amostras). As colunas QoS e Retain especificam os atributos do pacote MQTT. O campo Ativado indica se esta mensagem será ativada quando o botão "Iniciar" for clicado. O botão "Iniciar" fica ativo somente após o estabelecimento de uma conexão com o broker.Importante! O serviço IBM Bluemix IoTF é muito sensível à sintaxe e se desconecta imediatamente se o tópico de alguma forma não se encaixar no formato.Na parte inferior do formulário estão os logs: geral, o log de mensagens de publicação enviadas e o log de mensagens de publicação recebidas. Os logs podem ser limpos ou desativados. A proibição de log acelera a geração e a recepção de pacotes.Visualização de dados de nós da IoT
Você precisa iniciar com uma assinatura dos dados se eles não foram permanentemente assinados na sessão anterior da sessão de comunicação, caso contrário, o broker não enviará nada.Na guia "Assinatura por lista", é necessário registrar os tópicos que queremos receber do broker. Nesse caso, um tópico é escrito com o valor de quais mensagens serão enviadas pelo gerador.Se o campo Inscrever-se estiver marcado, o tópico será inscrito após clicar no botão "Inscrever-se". Se o valor do campo Inscrever-se não estiver marcado, a inscrição será cancelada desta inscrição quando você clicar no botão "Inscrever-se". Novamente, a operação de assinatura está disponível somente após o estabelecimento de uma conexão com o broker.Mesmo antes de assinar, você pode escrever na tabela de componentes visuais as variáveis que queremos observar em tempo real. Para fazer isso, clique no botão "Tabela".
A coluna "Nome da variável" contém o mesmo nome de variável (chave na terminologia JSON) que foi registrada na mensagem no formato JSON. O campo "Legenda da variável" contém o nome da variável exibida no componente visual. A coluna "Classe de widget" define o tipo de componente visual. Aqui você pode selecionar qualquer escala, inscrição no estilo LCD / LED ou gráfico.Após editar a tabela, clique no botão Widgets e organize os componentes visuais no formulário. Inicialmente, todos os componentes estarão em uma pilha no canto superior esquerdo. Você precisa arrastar e colocá-los no formulário na configuração desejada. A localização dos componentes é lembrada e reproduzida após a próxima abertura do formulário. O estilo de encaixe do componente segue o estilo do IDE RAD Studio ou MS Visual Studio.
Se uma conexão com o broker for estabelecida e assinada, no caso de mensagens com as variáveis correspondentes, seus valores serão refletidos imediatamente na janela de componentes visuais.O programa salva todas as configurações e logs nos arquivos JSON no disco, que podem ser editados manualmente.O repositório contém a versão do programa com a configuração preparada e salva nos arquivos JSON prontos para teste usando o broker Mosquitto incluído localmente.O broker, pronto para ativação, está localizado no repositório no arquivo Mosquitto_broker_projs.zip no diretório Mosquitto_1_4_5_bin. Você deve executar o arquivo Run_mosquitto.cmd.Sobre a análise JSON
O programa usa um analisador JSON de terceiros do projeto https://github.com/hgourvest/superobject Apesar do fato do RAD Studio XE8 ter um analisador JSON embutido, o superobjeto parecia mais interessante e mais poderoso em termos de recursos. Quando uma mensagem chega, o programa do cliente MQTT analisa o corpo da mensagem e seleciona pares de valores-chave individuais. Se uma matriz for encontrada, ela será ignorada porque os objetos na matriz não têm nomes e não há mecanismo (neste programa) para associá-los a qualquer variável nomeada no cliente. Os demais objetos nomeados são verificados em profundidade recursivamente até que todos os pares de valores-chave sejam recuperados. A chave será o nome da variável, o programa tentará converter os valores em um número de ponto flutuante; se falhar, o número será igual a zero.Tentando o aplicativo IBM IoT Real-Time Insights
Este aplicativo é o segundo de dois aplicativos práticos oferecidos pela IBM para IoT. Primeiro, a Internet of Things Foundation foi discutida em um artigo anterior. Existem vários outros aplicativos de demonstração para IoT no catálogo IBM, mas eles exigem a implementação e o lançamento de código customizado no servidor, o que inclui automaticamente um contador de pagamento.Mas voltando ao IoT Real-Time Insights. Entramos em sua conta. Como sempre, selecione a região Sul dos EUA. Clique no menu superior Catálogo. Descemos para o fundo, observando muitos serviços e aplicativos diferentes da IBM. Vemos:
Clique em IoT Real-Time Insights. Este aplicativo permite observar apenas, gerenciar dispositivos diretamente a partir dele não funcionará, a menos que os dispositivos possuam outros canais de comunicação além do MQTT.Ao criar o campo App:, deixe Deixar ilimitado. Não criamos aplicativos adicionais, porque a IBM começa imediatamente a contar dinheiro para eles. Plano de campo: deixe o Lite. Então, tudo será gratuito para nós.
Antes disso, o serviço Internet of Things Foundation já deveria ter sido criado e ativado, e pelo menos um dispositivo em nome do qual nosso cliente MQTT enviará pacotes já foi criado nele. Isso foi descrito em um artigo anterior.
Na página inicial do aplicativo IoT Real-Time Insights, começamos imediatamente conectando uma fonte de dados, e este será o serviço da Fundação Internet das Coisas que criamos anteriormente. Precisamos saber seu nome de código (ID da organização), chave da API e token de autenticação. Se não soubermos, retorne à Internet of Things Foundation e crie o que não sabemos.Após a conexão, na guia Dispositivos, todos os dispositivos registrados por nós devem ser exibidos. Nesse caso, existe apenas um.
Então você precisa configurar os esquemas de mensagens. Clique em Gerenciar esquemas e no sinal de adição Adicionar novo esquema de mensagem. É assim que você pode entender a configuração para descriptografar mensagens do dispositivo.
Aqui está um exemplo dessa configuração para as variáveis T, L1, L2, L3.
A variável L1, por exemplo, quando a edição foi representada por essa janela.
Depois de configurar os esquemas, você pode configurar a análise. I.e. de fato, as regras para o envio de mensagens para receptores externos de mensagens. O mais acessível é enviar um email.É assim que a regra para o envio de email é exibida se a variável T exceder 24:
Mas chega uma mensagem de email:
Mas o ponto central do aplicativo são os painéis. Pode haver muitos painéis. Os painéis consistem em componentes visuais que exibem os valores das variáveis criadas na guia Gerenciar esquemas em tempo real. A captura de tela abaixo mostra um exemplo de painel para exibir 4 variáveis: T, L1, L2, L3. Pacotes com valores variáveis foram gerados pelo nosso cliente MQTT. A variável T foi gerada como um número aleatório, L1, L2, L3 em função do seno.
Impressões do IBM IoT Real-Time Insights.
Até agora, o aplicativo é muito bruto. Janelas e caixas de diálogo são abertas com longos atrasos. O construtor de painéis é limitado em funcionalidade, para movimentos simples ou redimensionamentos, você precisa passar por várias caixas de diálogo. Os componentes do painel em si não possuem propriedades editáveis. O mesmo se aplica aos gráficos. Os gráficos não têm histórico e são limpos com o menor redimensionamento da janela. O email não é estável e pode demorar por muito tempo.Mas ainda é um serviço gratuito, disponível aqui e agora, e se o dispositivo puder publicar mensagens em um formato JSON adequado, lembre-se de um aplicativo da IBM.O projeto do cliente MQTT ainda está em seu antigo local: https://github.com/Indemsys/Delphi_MQTT_mosquittoSource: https://habr.com/ru/post/pt388343/
All Articles