Configuration API
Die Configuration API wird verwendet, um persistente Moduleinstellungen für die ArmorLink App bereitzustellen.
Configuration-Werte werden lokal auf dem Module gespeichert, bleiben automatisch über Neustarts hinweg erhalten und können ohne Neustart des Modules geändert werden.
Für den konzeptionellen Überblick siehe Configuration.
Basisbeispiel
int volume = 20;
module.config()
.addInt("volume", &volume, 20)
.label("Volume")
.section("Audio")
.description("DFPlayer volume")
.range(0, 30)
.step(1)
.onIntChange([](int value)
{
dfplayer.volume(value);
});
Dieses Beispiel definiert einen persistenten Integer-Wert, der:
- Den Namen
volumebesitzt - In der ArmorLink App als
Volumeangezeigt wird - In der Section
Audiogruppiert wird - Werte von
0bis30erlaubt - Eine Schrittweite von
1verwendet - Die Lautstärke des DFPlayers sofort aktualisiert
Zugriff auf die Configuration API
Configuration-Felder werden über die Modulinstanz erstellt.
module.config()
Weitere Informationen findest du unter ArmorLinkModule.
Unterstützte Feldtypen
ArmorLink unterstützt aktuell folgende Configuration-Feldtypen:
| Methode | Typ | Bearbeitbar | Beschreibung |
|---|---|---|---|
addInt(...) | Integer | Ja | Ganzzahliger Wert |
addFloat(...) | Float | Ja | Fließkommawert |
addBool(...) | Boolean | Ja | Wahr/Falsch-Wert |
addReadonly(...) | Readonly | Nein | Reines Informationsfeld |
addInt(...)
Erstellt einen Integer-Configuration-Wert.
int volume = 20;
module.config()
.addInt("volume", &volume, 20);
Der Wert wird lokal gespeichert und automatisch in der ArmorLink App bereitgestellt.
addFloat(...)
Erstellt einen Float-Configuration-Wert.
float speed = 1.0f;
module.config()
.addFloat("speed", &speed, 1.0f);
Float-Werte eignen sich für Zeiten, Geschwindigkeitsfaktoren, Sensorgrenzen und ähnliche Einstellungen.
addBool(...)
Erstellt einen Boolean-Configuration-Wert.
bool eyesEnabled = true;
module.config()
.addBool("eyesEnabled", &eyesEnabled, true);
Boolean-Werte eignen sich für Schalter und Ein/Aus-Funktionen.
addReadonly(...)
Erstellt ein schreibgeschütztes Informationsfeld.
module.config()
.addReadonly("firmware", "1.0.0")
.label("Firmware Version");
Readonly-Felder werden in der ArmorLink App angezeigt, können jedoch nicht verändert werden.
Typische Anwendungsfälle:
- Firmware-Version
- Hardware-Revision
- Modulinformationen
- Kalibrierungsstatus
label(...)
Legt die sichtbare Bezeichnung in der ArmorLink App fest.
.label("Volume")
Verwende klare und verständliche Bezeichnungen.
description(...)
Fügt eine ausführlichere Beschreibung hinzu.
.description("Controls the DFPlayer output volume")
Beschreibungen helfen Benutzern zu verstehen, was eine Einstellung bewirkt.
section(...)
Gruppiert Configuration-Felder in Sections.
.section("Audio")
Sections sind besonders hilfreich bei vielen Configuration-Werten.
Typische Sections:
- Audio
- Servos
- LEDs
- Timing
- Sensors
unit(...)
Legt die Anzeigeeinheit fest.
.unit("ms")
Typische Einheiten:
V%msdegC
Die Einheit wird von der ArmorLink App bei der Darstellung verwendet.
range(...)
Definiert den erlaubten Wertebereich.
.range(0, 30)
Die ArmorLink App verwendet diese Information, um geeignete Eingabefelder bereitzustellen.
step(...)
Definiert die Schrittweite.
.step(1)
Dies wird für Slider, Stepper und numerische Eingabefelder verwendet.
advanced(...)
Markiert ein Feld als erweitert.
.advanced()
Erweiterte Felder sind für Einstellungen gedacht, die normale Benutzer selten ändern müssen.
Änderungs-Callbacks
Configuration-Werte können automatisch Callbacks ausführen, wenn sie über die ArmorLink App geändert werden.
Dadurch kann ein Module sofort reagieren, ohne neu gestartet werden zu müssen.
Configuration-Änderungen werden sofort angewendet.
Wenn die ArmorLink App einen Wert ändert, wird der neue Wert unmittelbar übernommen und der passende Callback automatisch ausgeführt.
onIntChange(...)
Führt einen Callback aus, wenn sich ein Integer-Wert ändert.
module.config()
.addInt("volume", &volume, 20)
.onIntChange([](int value)
{
dfplayer.volume(value);
});
onFloatChange(...)
Führt einen Callback aus, wenn sich ein Float-Wert ändert.
module.config()
.addFloat("speed", &speed, 1.0f)
.onFloatChange([](float value)
{
animationSpeed = value;
});
onBoolChange(...)
Führt einen Callback aus, wenn sich ein Boolean-Wert ändert.
module.config()
.addBool("eyesEnabled", &eyesEnabled, true)
.onBoolChange([](bool value)
{
setEyesEnabled(value);
});
Persistenz
Configuration-Werte sind immer persistent.
Es ist keine zusätzliche Persistenz-Konfiguration erforderlich.
Die Werte werden lokal gespeichert und nach einem Neustart automatisch wiederhergestellt.
Configuration und das Gateway
Das Gateway speichert keine Configuration-Daten anderer Modules.
Configuration gehört immer dem Module, das sie bereitstellt.
Wenn die ArmorLink App einen Wert liest oder aktualisiert, leitet das Gateway die Anfrage lediglich weiter.
Weitere Informationen findest du unter Gateway.
Vollständiges Beispiel
int volume = 20;
float servoSpeed = 1.0f;
bool eyesEnabled = true;
void setupConfig()
{
module.config()
.addInt("volume", &volume, 20)
.label("Volume")
.section("Audio")
.range(0, 30)
.step(1)
.onIntChange([](int value)
{
dfplayer.volume(value);
});
module.config()
.addFloat("servoSpeed", &servoSpeed, 1.0f)
.label("Servo Speed")
.section("Servos")
.range(0.1f, 2.0f)
.step(0.1f);
module.config()
.addBool("eyesEnabled", &eyesEnabled, true)
.label("Eyes Enabled")
.section("LEDs")
.onBoolChange([](bool value)
{
setEyesEnabled(value);
});
module.config()
.addReadonly("firmware", "1.0.0")
.label("Firmware Version")
.section("System");
}
Zusammenfassung
Die Configuration API stellt persistente Moduleinstellungen für die ArmorLink App bereit.
Häufig verwendete Methoden:
addInt(...)addFloat(...)addBool(...)addReadonly(...)label(...)description(...)section(...)unit(...)range(...)step(...)advanced(...)onIntChange(...)onFloatChange(...)onBoolChange(...)
Configuration-Werte werden lokal gespeichert, automatisch wiederhergestellt und sofort angewendet.