Ein Widget und ein neues Gerät hinzufügen¶
Kompletter Zyklus: Von der Repo-Verzweigung bis zum zusammengeführten PR. Umfasst Firmware, Vertrag, React-Widget und Portal-Tests.
Wenn Sie nur Firmware ohne neues Widget brauchen — siehe 01-add-new-product.md.
Voraussetzungen¶
- Python 3.9+ mit
pip install pyyaml jsonschema - Node.js 18+
- PlatformIO CLI
- Zugriff auf das iDryer Portal für UIKit-Tests
Schritt 1. Fork und Clone¶
- Forken Sie das
idryer-coreRepository auf GitHub. -
Klonen Sie Ihren Fork lokal:
-
Überprüfen Sie, dass der Vertrag die Validierung im aktuellen Zustand besteht:
Schritt 2. Bearbeiten Sie den Vertrag¶
Alle Änderungen gehen in contracts/mqtt_contract.yaml. Halten Sie alles in einem einzigen Changeset.
Warning
Bearbeiten Sie keine Dateien in _generated/ — sie werden von Generatoren überschrieben.
2a. Fähigkeits-Vokabular (neuer Peripherie-Typ)¶
Wenn das Gerät einen neuen Hardware-Typ hat (z.B. einen CO2-Sensor), fügen Sie einen Eintrag zum capability_vocabulary Abschnitt hinzu:
capability_vocabulary:
co2:
description: "CO2 sensor (ppm)"
config_flag: hasAirCo2
telemetry_field: airCo2Ppm
Dies fügt automatisch das Feld hasAirCo2: bool zu iDryer::Config bei der nächsten Regenerierung hinzu.
2b. Kanonische Rollen (neue Rolle + Widget)¶
Wenn das Gerät ein neues Menü-Element freigibt, registrieren Sie die Rolle in canonical_roles:
Der widget Wert ist der Name der React-Komponente, die Sie in Schritt 5 schreiben.
2c. Invoke-Aktionen (falls das Widget Befehle sendet)¶
Wenn das Widget eine Aktion auf dem Gerät auslöst, beschreiben Sie es in invoke_actions:
invoke_actions:
my_device:
co2.calibrate:
description: "Start CO2 sensor calibration"
args:
targetPpm:
type: uint16
description: "Reference CO2 value (ppm)"
required: true
2d. Geräteprofil (neuer Gerätetyp)¶
Fügen Sie das Profil zu device_profiles hinzu:
device_profiles:
my_device:
description: "My device"
capabilities: [led, co2]
invoke_actions: [co2.calibrate]
Fähigkeitswerte stammen aus dem capability_vocabulary definiert in Schritt 2a.
Schritt 3. Validieren und Regenerieren¶
Flags:
| Flag | Effekt |
|---|---|
| (keine) | Validieren + alle Generatoren + zu Portal kopieren |
--firmware-only |
Nur Firmware-Generatoren, Portal-Kopie überspringen |
--help |
Hilfe anzeigen |
Bei Erfolg wird _generated/ aktualisiert mit:
uart_protocol.h,mqtt_topics.h— C++ HeaderiDryer_api.h— Config/DeviceType Fassademqtt-api.types.ts— TypeScript-Typenscaffolds/my_device/— PlatformIO-Projektgerüst- Im Portal: Dateien in
src/components/widgets/
Wenn regen.sh mit einem Fehler beendet wird, beheben Sie das Problem, bevor Sie fortfahren.
Schritt 4. Implementieren Sie Firmware¶
Verwenden Sie das generierte Gerüst-Projekt:
Füllen Sie die TODO-Abschnitte in src/main.cpp:
onOnline()— Konfiguration aus NVS laden, Hardware initialisieren.loop()— Sensoren abfragen,s_runtime.publishTelemetry(tel)aufrufen.buildInfoJson()— Bereits vom Generator aus Fähigkeiten gefüllt.onInvoke()—co2.calibratebehandeln.