|
| 1 | += Architekturproposal: Erweiterung der MQTT-Schnittstelle um Firmware-Befehle |
| 2 | +:revdate: 2025-12-21 |
| 3 | +:page-layout: proposal |
| 4 | +:sectnums: |
| 5 | +:toc: left |
| 6 | +:toc-title: Inhalt |
| 7 | + |
| 8 | +<<< |
| 9 | + |
| 10 | +== 1. Einleitung und Zielsetzung |
| 11 | + |
| 12 | +Dieses Architekturproposal definiert die Integration von direkten Firmware-Steuerungsbefehlen (`set raw`, `set cc1101_reg`) in die `PySignalduino` MQTT-API (V1), basierend auf den etablierten Architekturentscheidungen in ADR-001 und ADR-002. Ziel ist es, die volle Funktionalität der seriellen Schnittstelle über MQTT verfügbar zu machen. |
| 13 | + |
| 14 | +== 2. Betroffene Komponenten |
| 15 | + |
| 16 | +* `signalduino/mqtt.py`: Muss Abonnements für die neuen Command-Topics registrieren. |
| 17 | +* `signalduino/controller.py`: Muss um die Logik zur Ausführung dieser Befehle erweitert werden. |
| 18 | +* `Command Dispatcher` (gemäß ADR-002): Neue Routen und JSON-Schemas für die Validierung müssen hinzugefügt werden. |
| 19 | + |
| 20 | +== 3. Definition der MQTT-Kommandos |
| 21 | + |
| 22 | +Die neuen Befehle folgen der in ADR-001 definierten Struktur: `signalduino/v1/commands/set/<target>/<parameter>`. Das Payload-Format ist strikt JSON und wird durch den Command Dispatcher validiert. |
| 23 | + |
| 24 | +=== 3.1. `set raw` (Senden von rohen Firmware-Befehlen) |
| 25 | + |
| 26 | +|=== |
| 27 | +| Thema | `signalduino/v1/commands/set/firmware/raw` |
| 28 | +| Payload-Format | JSON |
| 29 | +| Payload-Schema (Teilauszug) | Objekt mit `value` (String, z.B. C11) |
| 30 | +| Beispiel Payload | `{"value": "C11"}` |
| 31 | +| Beschreibung | Leitet den String im Feld `value` direkt als seriellen Befehl an die Firmware weiter. |
| 32 | +|=== |
| 33 | + |
| 34 | +=== 3.2. `set cc1101_reg` (Setzen eines CC1101-Registers) |
| 35 | + |
| 36 | +Dieser Befehl ermöglicht das Setzen eines spezifischen CC1101-Registers. |
| 37 | + |
| 38 | +|=== |
| 39 | +| Thema | `signalduino/v1/commands/set/cc1101/register` |
| 40 | +| Payload-Format | JSON |
| 41 | +| Payload-Schema (Teilauszug) | Objekt mit `address` (Hex-String, 2 Zeichen) und `value` (Hex-String, 2 Zeichen) |
| 42 | +| Beispiel Payload | `{"address": "0D", "value": "2E"}` |
| 43 | +| Beschreibung | Setzt das CC1101-Register an der Adresse `address` auf den Wert `value`. Alle Werte müssen als Hex-Strings (z.B. "0D") übergeben werden. |
| 44 | +|=== |
| 45 | + |
| 46 | +== 4. Architekturentscheidung und Begründung |
| 47 | + |
| 48 | +Basierend auf den Anforderungen wird die folgende Entscheidung getroffen und in das Projekt-ADR-System integriert: |
| 49 | + |
| 50 | +[IMPORTANT] |
| 51 | +==== |
| 52 | +**Titel:** Integration der Firmware-Steuerbefehle (`raw`, `cc1101_reg`) in die V1 MQTT-API |
| 53 | +
|
| 54 | +**Kontext:** Um PySignalduino zu einem vollständigen Backend für Steuerungs-Frontends (wie FHEM) zu machen, ist es erforderlich, die direkten Steuerungsmöglichkeiten der seriellen Schnittstelle (z.B. Frequenz- und Registermanipulation) über die standardisierte MQTT-API anzubieten. |
| 55 | +
|
| 56 | +**Entscheidung:** |
| 57 | +Die Befehle `set raw` und `set cc1101_reg` werden unter den in Abschnitt 3.1 und 3.2 definierten Topics und Payloads in die MQTT-Schnittstelle integriert. Die strikte **JSON-Schema-Validierung** wird für beide Befehle implementiert. |
| 58 | +
|
| 59 | +**Begründung:** |
| 60 | +* **Vollständigkeit:** Diese Befehle schließen eine kritische Lücke im Funktionsumfang der MQTT-API im Vergleich zur seriellen Schnittstelle. |
| 61 | +* **Sicherheit:** Die direkte Manipulation der CC1101-Hardware erfordert höchste Sorgfalt. Die in ADR-002 beschlossene **JSON-Schema-Validierung** ist für diese Befehle zwingend erforderlich, um sicherzustellen, dass nur gültige Adressen und Werte an die Firmware gesendet werden. |
| 62 | +* **Konsistenz:** Durch die Verwendung der `signalduino/v1/commands/set` Topic-Hierarchie wird die Konsistenz mit dem Rest der API gewahrt. |
| 63 | +
|
| 64 | +**Konsequenzen:** |
| 65 | +* Es müssen zwei neue JSON-Schemas für die Validierung erstellt werden. |
| 66 | +* Der `Command Dispatcher` muss erweitert werden, um diese Befehle zu routen. |
| 67 | +* Die Kernfunktionalität muss in `signalduino/controller.py` implementiert werden. |
| 68 | +==== |
| 69 | + |
| 70 | +== 5. Compliance-Checks (Mermaid) |
| 71 | + |
| 72 | +Der erweiterte Workflow visualisiert die Verarbeitung eines CC1101-Registersatzbefehls: |
| 73 | + |
| 74 | +[mermaid, flowchart, "CC1101 Register Set Workflow"] |
| 75 | +---- |
| 76 | +flowchart TD |
| 77 | + A[MQTT Client sendet set cc1101_reg] --> B{Topic: signalduino/v1/commands/set/cc1101/register} |
| 78 | + B --> C[MQTT Interface empfängt Payload] |
| 79 | + C --> D[Command Dispatcher] |
| 80 | + D --> E{Input Validator (JSON Schema)} |
| 81 | + E -- Validierung fehlgeschlagen --> F[Error Response Topic publish] |
| 82 | + E -- Validierung erfolgreich --> G[SignalduinoController.execute_command] |
| 83 | + G --> H[Controller generiert serielle Raw-Befehle] |
| 84 | + H --> I[Transport Layer sendet an Hardware] |
| 85 | + I --> J{Hardware (SIGNALduino)} |
| 86 | + J --> K[Hardware setzt CC1101 Register] |
| 87 | +---- |
| 88 | + |
| 89 | +== 6. Nächste Schritte (Phase 2) |
| 90 | + |
| 91 | +Nach Genehmigung dieses Proposals folgt die Implementierungsplanung (Phase 2) mit der Erstellung der JSON-Schemas und der genauen Definition der `Controller`-Methoden. |
0 commit comments