O inverno está terminando, e esta é uma ocasião para traçar outra linha e dizer o que há de novo no MQTT / UDP.
Para iniciantes, links para uma
introdução e
artigo anteriores.
Obrigado a todos que reagiram com interesse e, principalmente, àqueles que compartilharam seus pensamentos. Você realmente me ajudou com a abordagem da assinatura digital. Então, o que mudou em larga escala:
- Um mecanismo para extensão de protocolo flexível apareceu: Tagged Tail Records, TTRs
- Com base nisso, um esquema de assinatura de pacote digital foi criado
- Foi criado um mecanismo para configuração remota de componentes
- Aumentou o ciclo completo do IC: montagem, testes de unidade, testes de protocolo de ponta a ponta (linguagens de programação 4 * 4)
- A implementação C agora suporta diferentes arquiteturas e pode integrar-se a diferentes SO e monitores.
- Existem pacotes públicos para Python e Lua, embora, é claro, eles já estejam desatualizados.
Bem, existem muitas pequenas coisas: integração com o OpenHAB, arquivos de configuração e log, verificação de compatibilidade com o serviço MQTT na nuvem, um caso de teste para o Wemos D1 (NodeMCU), um caso de teste para atmega128 + ethernet (não arduino), um exemplo de conector de protocolo no Java (CCU825), um exemplo de controlador informante na bandeja da área de trabalho foi criado (finalmente, eu posso acender a luz na sala com dois cliques do mouse :) e muito mais.
Agora em ordem.
Tagged Tail Records
Fiquei apertado como parte do pacote MQTT. Adicionei aditivos de cauda ao seu pacote na forma de conteúdo do comprimento da tag, no qual agora você pode colocar os dados necessários. Hoje, é o ID do pacote, o ID do pacote ao qual estamos respondendo (para QoS, isso ainda funciona) e a assinatura digital, se ativada. Também está planejado que a data e hora em milissegundos do momento de medir o valor e o momento de enviar o pacote (como um paliativo para o momento de medição), e outras extensões arbitrárias sejam possíveis dentro do tamanho do pacote UDP.
(SVG não está inserido,
ilustração aqui )
Ele já funciona em qualquer lugar, exceto Lua. (Em geral, Lua me decepcionou, e apenas o NodeMCU o mantém e depois tentarei mudar para o Python lá).
Assinatura digital
Eu tinha medo de abordar esse peso, mas após o advento das extensões de tags tudo se tornou bastante simples. O pacote enviado é assinado de acordo com o padrão HMAC MD5 (outros que achei demais para pacotes UDP curtos), uma verificação é feita na entrada. A aceitação ou não de um pacote sem assinatura é deixada no código do aplicativo. É verdade que em Java existe uma opção "rejeitar tudo sem assinatura", mas isso parece ser maximalismo.
Configuração remota

De fato, tudo é simples novamente: existe um programa de desktop (Java, funciona em qualquer lugar) que faz uma solicitação (pacote SUBSCRIBE) para um tópico de um determinado tipo (
$SYS/conf/#
). Todos os nós que podem ser configurados remotamente correspondem aos valores atuais dos parâmetros configuráveis. O programa sintetiza uma interface do usuário simples com nomes e campos de entrada, o usuário altera as configurações, os comandos de atualização retornam. Toda a infraestrutura nas bibliotecas, do lado do código do aplicativo, você só precisa emitir uma lista de parâmetros e poder gravá-los / lê-los em um arquivo ou NVRAM.
Arquitetura e código dependente do sistema para C
Agora você pode adicionar configurações para a arquitetura (cadeia de ferramentas) e o código de cola para o SO ou monitor de destino. Isso é testado em três configurações - unix / cygwin (./configure), mingw e NUT / OS (sem configuração).
Bem, provavelmente, é tudo por hoje. Não há tempo para detalhes, mas se houver interesse, escreverei com mais detalhes.
A documentação do projeto , mais do que as aspirações, ainda é bastante relevante e está bem escrita lá. Sinto muito pela falta do idioma russo, mas há muito pouco tempo para isso, quero traduzir com base na infraestrutura e ainda não encontrei nenhum serviço público aceitável (editor on-line) para traduzir um parágrafo em um parágrafo.
Bem,
o próprio repositório .