Der Winter geht zu Ende, und dies ist eine Gelegenheit, eine weitere Linie zu ziehen und zu erzählen, was in MQTT / UDP neu ist.
Für den Anfang Links zu einer früheren
Einführung und einem
Artikel .
Vielen Dank an alle, die mit Interesse reagiert haben und insbesondere an diejenigen, die ihre Gedanken geteilt haben. Sie haben mir beim Ansatz der digitalen Signatur wirklich geholfen. Also, was hat sich im großen Maßstab geändert:
- Ein Mechanismus zur flexiblen Protokollerweiterung ist erschienen: Tagged Tail Records, TTRs
- Auf dieser Grundlage wurde ein digitales Paketsignaturschema erstellt
- Ein Mechanismus zur Fernkonfiguration von Komponenten wurde erstellt
- Erhöhte den gesamten CI-Zyklus: Assembly, Unit-Tests, End-to-End-Protokolltests (4 * 4 Programmiersprachen)
- Die C-Implementierung unterstützt jetzt verschiedene Architekturen und kann in verschiedene Betriebssysteme und Monitore integriert werden.
- Es gibt öffentliche Pakete für Python und Lua, obwohl diese natürlich bereits veraltet sind.
Nun, es gibt viele kleine Dinge: Integration mit OpenHAB, Konfigurationsdateien und Protokollierung, Überprüfung der Kompatibilität mit dem Cloud-MQTT-Dienst, ein Testfall für Wemos D1 (NodeMCU), ein Testfall für atmega128 + Ethernet (nicht Arduino), ein Beispiel für einen Protokoll-Connector Java (CCU825), ein Beispiel für einen Informer-Controller in der Desktop-Taskleiste, wurde erstellt (endlich kann ich das Licht im Raum mit zwei Mausklicks einschalten :) und mehr.
Jetzt in Ordnung.
Verschlagwortet mit Tail Records
Als Teil des MQTT-Pakets wurde ich eng. Ich habe seinem Paket Schwanzadditive in Form von Tag-Längen-Inhalten hinzugefügt, in die Sie jetzt die erforderlichen Daten einfügen können. Heute ist es die ID des Pakets, die ID des Pakets, auf das wir antworten (für QoS funktioniert dies noch) und die digitale Signatur, falls aktiviert. Es ist auch geplant, dass die Datums- und Uhrzeit in Millisekunden des Zeitpunkts der Messung des Werts und des Zeitpunkts des Sendens des Pakets (als Palliativ zum Zeitpunkt der Messung) und weitere willkürliche Erweiterungen innerhalb der Größe des UDP-Pakets möglich sind.
(SVG ist nicht eingefügt,
Abbildung hier )
Es funktioniert schon überall außer Lua. (Im Allgemeinen hat mich Lua enttäuscht und nur NodeMCU hält es, und dann werde ich versuchen, dort zu Python zu wechseln.)
Digitale Signatur
Ich hatte Angst, mich diesem Gewicht zu nähern, aber nach dem Aufkommen der Tag-Erweiterungen wurde alles ganz einfach. Das gesendete Paket wird gemäß dem HMAC MD5-Standard signiert (andere, die ich für kurze UDP-Pakete als zu lang empfunden habe). Am Eingang wird eine Überprüfung durchgeführt. Ob ein Paket ohne Signatur akzeptiert werden soll oder nicht, bleibt dem Anwendungscode überlassen. Zwar gibt es in Java einen Schalter "Alle nicht signierten ablehnen", aber dies scheint Maximalismus zu sein.
Remote-Konfiguration

Tatsächlich ist alles wieder einfach: Es gibt ein Desktop-Programm (Java, funktioniert überall), das eine Anfrage (SUBSCRIBE-Paket) für ein Thema eines bestimmten Typs (
$SYS/conf/#
) stellt. Alle Knoten, die remote konfiguriert werden können, entsprechen den aktuellen Werten der konfigurierbaren Parameter. Das Programm daraus synthetisiert eine einfache Benutzeroberfläche mit Namen und Eingabefeldern, der Benutzer ändert die Einstellungen, die Aktualisierungsbefehle fliegen zurück. Für die gesamte Infrastruktur in Bibliotheken müssen Sie auf der Seite des Anwendungscodes nur eine Liste von Parametern ausgeben und diese in eine Datei oder ein NVRAM schreiben / lesen können.
Architektur- und systemabhängiger Code für C.
Jetzt können Sie Einstellungen für die Architektur (Toolchain) und Klebercode für das Zielbetriebssystem oder den Zielmonitor hinzufügen. Dies wird in drei Konfigurationen getestet: Unix / Cygwin (./configure), Mingw und NUT / OS (ohne Konfiguration).
Nun, wahrscheinlich ist das alles für heute. Es gibt keine Zeit für Details, aber wenn Interesse besteht, werde ich detaillierter schreiben.
Die Dokumentation für das Projekt ist mehr als die Bestrebungen immer noch sehr relevant und wird dort anständig geschrieben. Entschuldigen Sie das Fehlen der russischen Sprache, aber dafür bleibt nur sehr wenig Zeit. Ich möchte basierend auf der Infrastruktur übersetzen, und ich habe noch keinen akzeptablen öffentlichen Dienst (Online-Editor) für die Übersetzung eines Absatzes in einen Absatz gefunden.
Nun,
das Repository selbst .