L'hiver se termine et c'est l'occasion de tracer une autre ligne et de dire les nouveautés de MQTT / UDP.
Pour commencer, des liens vers une
introduction et un
article précédents.
Merci à tous ceux qui ont réagi avec intérêt et surtout à ceux qui ont partagé leurs réflexions. Vous m'avez vraiment aidé avec l'approche de la signature numérique. Donc, ce qui a changé à grande échelle:
- Un mécanisme d'extension flexible du protocole est apparu: Tagged Tail Records, TTRs
- Sur cette base, un schéma de signature de package numérique a été élaboré
- Un mécanisme de configuration à distance des composants
- Augmentation du cycle CI complet: assemblage, tests unitaires, tests de protocole de bout en bout (4 * 4 langages de programmation)
- L'implémentation C prend désormais en charge différentes architectures et peut s'intégrer à différents systèmes d'exploitation et moniteurs.
- Il existe des packages publics pour Python et Lua, bien que, bien sûr, ils soient déjà obsolètes.
Eh bien, il y a beaucoup de petites choses: intégration avec OpenHAB, fichiers de configuration et journalisation, vérification de la compatibilité avec le service cloud MQTT, un cas de test pour Wemos D1 (NodeMCU), un cas de test pour atmega128 + ethernet (pas arduino), un exemple de connecteur de protocole sur Java (CCU825), un exemple de contrôleur d'informateur dans le plateau de bureau est fait (enfin je peux allumer la lumière dans la pièce en deux clics de souris :), et plus encore.
Maintenant en ordre.
Tagged Tail Records
Je suis devenu à l'étroit dans le cadre du package MQTT. J'ai ajouté des additifs de queue à son package sous la forme d'un contenu de longueur d'étiquette, dans lequel vous pouvez maintenant mettre les données nécessaires. Aujourd'hui, c'est l'id du package, l'id du package auquel nous répondons (pour QoS, cela fonctionne toujours) et la signature numérique, si elle est activée. Il est également prévu que la date-heure en millisecondes du moment de la mesure de la valeur et du moment de l'envoi du paquet (comme palliatif au moment de la mesure), et d'autres extensions arbitraires soient possibles dans la taille du paquet UDP.
(SVG n'est pas inséré,
illustration ici )
Cela fonctionne déjà partout sauf Lua. (En général, Lua m'a déçu, et seul NodeMCU le détient, puis j'essaierai de passer à Python là-bas).
Signature numérique
J'avais peur d'approcher ce poids, mais après l'avènement des extensions de balises, tout est devenu assez simple. Le paquet envoyé est signé selon la norme HMAC MD5 (autres que j'ai trouvé trop longs pour les paquets UDP courts), une vérification est faite en entrée. L'acceptation ou non d'un colis sans signature est laissée au code de l'application. Certes, en Java, il y a un commutateur «rejeter tout ce qui n'est pas signé», mais cela semble être du maximalisme.
Configuration à distance

En fait, tout est à nouveau simple: il existe un programme de bureau (Java, fonctionne partout) qui fait une demande (package SUBSCRIBE) pour un sujet d'un certain type (
$SYS/conf/#
). Tous les nœuds configurables à distance correspondent aux valeurs actuelles des paramètres configurables. Le programme synthétise une interface utilisateur simple avec des noms et des champs de saisie, l'utilisateur modifie les paramètres, les commandes de mise à jour s'envolent. L'ensemble de l'infrastructure dans les bibliothèques, du côté du code d'application, il vous suffit de donner une liste de paramètres et de pouvoir les écrire / lire dans un fichier ou une NVRAM.
Architecture et code dépendant du système pour C
Vous pouvez maintenant ajouter des paramètres pour l'architecture (chaîne d'outils) et du code de collage pour le système d'exploitation ou le moniteur cible. Ceci est testé sur trois configurations - unix / cygwin (./configure), mingw et NUT / OS (sans configurer).
Eh bien, probablement, c'est tout pour aujourd'hui. Il n'y a pas de temps pour les détails, mais s'il y a un intérêt, j'écrirai plus en détail.
La documentation du projet , plus que les aspirations, est toujours assez pertinente, et elle y est décemment écrite. Désolé pour le manque de la langue russe, mais il y a très peu de temps pour cela, je veux traduire en fonction de l'infrastructure, et je n'ai pas encore trouvé de service public acceptable (éditeur en ligne) pour traduire un paragraphe en paragraphe.
Eh bien,
le référentiel lui-même .