docs icon indicating copy to clipboard operation
docs copied to clipboard

Add AsyncAPI support

Open Maschga opened this issue 11 months ago • 5 comments

Fix #810 Fix #666

TODO:

  • [x] write AsyncAPI specification, document setters only
  • [x] recheck types
  • [x] add examples
  • [x] complete enums
  • [ ] replace TODOs @naltatis
  • [ ] Theming @naltatis

Preview: grafik

Maschga avatar Feb 21 '25 13:02 Maschga

@naltatis Ich bin soweit durch. Du kannst gerne starten. Wenn du Fragen hast, immer her damit.

Es sind 304 TODOs übrig, sorry für den kleinen Schock. Teilweise lässt sich aber die Beschreibung von der RestAPi verwenden und bestimmt lassen sich manche TODOs auch einfach löschen.

Maschga avatar Mar 10 '25 13:03 Maschga

Ich überlege immer noch ob wir die Daten nicht direkt aus der State Typescript Struktur + optionale JsDoc Annotation im Core Projekt erzeugen sollten. Vielleicht auch erst einmal ohne AsyncAPI Format sondern direkt als Markdown (oder leichtes JSON-Meta-Format) ähnlich wie die aktuelle Doku nur autogeneriert/-aktualisiert.

Also aus einer Struktur wie dieser

// types.ts
export interface State {
  battery: Battery[];
  /** @mqtt.action write */
  batteryMode: BatteryMode;
  ...
}

interface Battery {
  power: number;
  capacity: number;
  soc: number;
  /** @description battery control supported */
  controllable: boolean
}

...

Dann so etwas generieren

# MQTT Docs

- `/battery/<index>/power` number
- `/battery/<index>/capacity ` number
- `/battery/<index>/soc` number
- `/battery/<index>/controllable` battery control supported, boolean
- `/batteryMode` ["ModeA", "ModeB"], writable

Natürlich wäre es cool, wenn wir Beschreibungstexte zu allen Werte hätten, wäre aber für einen ersten Wurf nicht zwingend erforderlich.

Wir können auch noch mit Value-Types anstatt JS Primitiven Arbeiten (bspw. capacity: Energy) und dann am Value Type Dokumentieren, dass es Energy in kWh, number ist weil wir das immer konsistent verwenden. Aber alles potentielle Erweiterung. Könnte man dann iterativ immer schicker machen.

Hierfür müssten am Parser/Generator bauen, die dann das Markdown (oder ein JSON) erzeugen welches wird dann bei jedem Release vom Core Repo ins Docs Repo pushen. Bei den Templates machen wir das heute ja schon so ähnlich. Defacto bauen wir dann dort die Publish Logik von unserem Go Code nach. Aber die ändert sich weniger häufig als sich Felder verändern.

naltatis avatar Apr 25 '25 07:04 naltatis

Soetwas habe ich mir auch schon gedacht. DIe mqtt-API ist viel zu groß und undurchsichtig, um sie manuell zu dokumentieren und danach zu aktualiseren.

Dann machen wir ertseinmal den Typescript Rewrite und dann das MQTT-API Thema. 👍

Maschga avatar Apr 25 '25 08:04 Maschga

Sounds like a plan. Ich mach dann hier erst einmal zu.

naltatis avatar Apr 25 '25 09:04 naltatis

Hi, kann jemand diesen PR reopen?

Maschga avatar May 29 '25 09:05 Maschga