Die Grundlagen
Dieses Kapitel behandelt alles, was ein OST-Modul ohne ein INDI-Device zu steuern tun kann — was bereits den Kern des Frameworks ausmacht: das Datenmodell (Properties und Elemente), wie man auf einen Schreibzugriff reagiert, wie man dieses Modell dynamisch aufbaut oder verändert, die verfügbaren Elementtypen, Grids und Graphen, Wertelisten, die Persistenz in Profilen, und wie zwei Module zusammenarbeiten (Master/Slave).
Jede Seite stützt sich auf ein echtes, minimales Beispielmodul aus dem Repository ost/ostmodules — frei zu lesen, zu laden und zu verändern.
- Anatomie eines Moduls
Basemodule vs. IndiModule, das Tripel .h/.cpp/.json, die Funktion initialize(), die Ereigniskette
- Das kleinste Modul — Properties und Elemente
Eine Property und ihre Elemente in JSON deklarieren: das Modul hello
- Auf einen Schreibzugriff des Benutzers reagieren
directedit, autoupdate und wie man einen geschriebenen Wert extrahiert, wenn das Framework ihn nicht für Sie anwendet
- Properties dynamisch erzeugen, in C++
Eine Property und ihre Elemente im Code aufbauen, bei der Instanziierung oder auf Anfrage, ohne JSON-Datei
- Der Typenkatalog
Alle Elementtypen, nur lesen vs. lesen/schreiben, Typen innerhalb einer Property mischen, directedit SV vs. SA
- Aktualisierungen serverseitig
Einen Wert ohne Benutzeraktion verändern, die Anzeige mit devcat/group organisieren, häufig aktualisierte Properties isolieren
- Die drei Koordinationsregeln für Switches
OneOfMany (Radio), AtMostOne (optionales Radio), Any (unabhängig) — vollständig deklarativ
- Die Wertelisten
Die drei Geltungsbereiche einer Werteliste (Element, Modul, Controller) und die Einstellung constrained
- Die Profile
hasprofile:true — Speichern/Laden einer benannten Konfiguration, vollständig automatisch
- Grids und Graphen
push()/clearGrid(), generisches CRUD auf Client-Seite, und der Graph als einfache Visualisierung eines Grids
- Master/Slave-Beziehung
Ein Modul steuert ein anderes: declareFamily, otherModuleSetValue, onOtherModuleEvent
- Das eigene Modul bauen und integrieren
Zwei Wege, das eigene Modul leben zu lassen: eigenständig, oder integriert ins Repository ost/ostmodules