El invierno está terminando, y esta es una ocasión para dibujar otra línea y contar qué hay de nuevo en MQTT / UDP.
Para empezar, enlaces a una
introducción y
artículo anteriores .
Gracias a todos los que reaccionaron con interés y especialmente a aquellos que compartieron sus pensamientos. Realmente me ayudaste con el enfoque de firma digital. Entonces, lo que ha cambiado a gran escala:
- Ha aparecido un mecanismo para la extensión de protocolo flexible: Tagged Tail Records, TTRs
- En base a esto, se ha realizado un esquema de firma de paquete digital
- Se ha creado un mecanismo para la configuración remota de componentes.
- Aumentó el ciclo de CI completo: ensamblaje, pruebas unitarias, pruebas de protocolo de extremo a extremo (4 * 4 lenguajes de programación)
- La implementación de C ahora admite diferentes arquitecturas y puede integrarse con diferentes sistemas operativos y monitores.
- Hay paquetes públicos para Python y Lua, aunque, por supuesto, ya están desactualizados.
Bueno, hay muchas cosas pequeñas: integración con OpenHAB, archivos de configuración y registro, comprobación de compatibilidad con el servicio MQTT en la nube, un caso de prueba para Wemos D1 (NodeMCU), un caso de prueba para atmega128 + ethernet (no arduino), un ejemplo de un conector de protocolo en Java (CCU825), se hace un ejemplo de un controlador informador en la bandeja del escritorio (finalmente puedo encender la luz en la habitación con dos clics del mouse :), y más.
Ahora en orden.
Etiquetado Tail Records
Me hice agobiante como parte del paquete MQTT. Agregué aditivos de cola a su paquete en forma de contenido de longitud de etiqueta, en el que ahora puede colocar los datos necesarios. Hoy es la identificación del paquete, la identificación del paquete al que estamos respondiendo (para QoS, esto todavía funciona) y la firma digital, si está habilitada. También está planeado que la fecha y hora en milisegundos del momento de medir el valor y el momento de enviar el paquete (como paliativo para el momento de la medición), y otras extensiones arbitrarias son posibles dentro del tamaño del paquete UDP.
(SVG no está insertado,
ilustración aquí )
Ya funciona en todas partes excepto Lua. (En general, Lua me decepcionó, y solo NodeMCU lo retiene, y luego intentaré cambiar a Python allí).
Firma digital
Tenía miedo de acercarme a este peso, pero después del advenimiento de las extensiones de etiquetas, todo se volvió bastante simple. El paquete enviado se firma de acuerdo con el estándar HMAC MD5 (otros que encontré demasiado largos para paquetes UDP cortos), se realiza una comprobación en la entrada. Si se acepta o no un paquete sin firma se deja al código de la aplicación. Es cierto que en Java hay un interruptor "rechazar todo sin signo", pero esto parece ser maximalismo.
Configuración remota

De hecho, todo es simple nuevamente: hay un programa de escritorio (Java, funciona en todas partes) que realiza una solicitud (paquete SUSCRIBIRSE) para un tema de cierto tipo (
$SYS/conf/#
). Todos los nodos que se pueden configurar de forma remota corresponden a los valores actuales de los parámetros configurables. El programa a partir de esto sintetiza una interfaz de usuario simple con nombres y campos de entrada, el usuario cambia la configuración, los comandos de actualización vuelan de regreso. Toda la infraestructura en las bibliotecas, desde el lado del código de la aplicación, solo necesita emitir una lista de parámetros y poder escribirlos / leerlos en un archivo o NVRAM.
Arquitectura y código dependiente del sistema para C
Ahora puede agregar configuraciones para la arquitectura (cadena de herramientas) y el código de pegamento para el sistema operativo o monitor de destino. Esto se prueba en tres configuraciones: unix / cygwin (./configure), mingw y NUT / OS (sin configurar).
Bueno, probablemente, eso es todo por hoy. No hay tiempo para detalles, pero si hay interés, escribiré con más detalle.
La documentación para el proyecto , más que las aspiraciones, sigue siendo bastante relevante, y está bien escrita allí. Perdón por la falta del idioma ruso, pero hay muy poco tiempo para esto, quiero traducir según la infraestructura, y todavía no he encontrado ningún servicio público aceptable (editor en línea) para traducir un párrafo en un párrafo.
Bueno,
el repositorio en sí .