Skip to content

4 · Welche Schnittstellen wir bereitstellen

Ein Blatt für die Frage, die am Anfang jeder Anbindung steht: welche Dienste gibt es, wer spricht mit wem, und wo steht der Vertrag dazu. Die drei ausführlichen Blätter — Fahrgestell, uGo-Server, Cloud — beschreiben je eine Schnittstelle im Einzelnen. Dieses hier ordnet sie ein und nennt die übrigen.

4.1 Die Landkarte in einem Satz je Ebene

Ebene Wer spricht Wohin Träger
Unten uGo-Server, Zugangsdienste Fahrgestell HTTP und WebSocket, ohne Anmeldung — deshalb liegt das Fahrgestell in einem eigenen Netzabschnitt
In der Mitte Tablett, Kiosk, Zweitanzeige uGo-Server, /api/** HTTP, Sitzungskeks, zwei Rollen
Seitwärts Roboter untereinander Roboter UDP-Rundsendung, alle zwei Sekunden, je Standort signiert
Zum Haus uGo-Server, Zugangsdienste Tür, Aufzug, u-IoT HTTP, je Standort eine Adresse
Nach oben Gateway AWS IoT Core MQTT über TLS, Zertifikat je Gerät, nur ausgehend

4.2 Die Dienste im Einzelnen

Dienst Grundpfad Wofür Anmeldung Vertrag
uGo-Server /api/** Bedienoberfläche, Touren, Regeln, Karten, Zonen, Fahrtenbuch, Flotte, Cloud-Anbindung Sitzungskeks, Rollen Bediener und Techniker; einige Routen bewusst ohne uGo-Server, alle Routen
uGo-Server, Zweitsockel dieselben Pfade, nur lesend Fernwartung. Bindet an 127.0.0.1, GET/HEAD, Erlaubnisliste keine — und ohne Sitzung antworten die geschützten Routen mit 401 Fernwartung
Durchleitung Fahrgestell /api/chassis/** Der Weg zum Fahrgestell, Pfad und Rumpf unverändert teils Fahrgestell
Durchleitung u-IoT /api/uiot/** Nur lesend, gesperrte Pfade, nur mit Anmeldung ja uGo-Server, 2.4
Durchleitung Sprachdienst /api/chatbot/** Kontext, Befehle, Zieladresse. Die Sprachstrecke selbst ist gesperrt Techniker Sprache
Türsteuerung eigener Dienst Erkennt Türen aus den Zeichnungen der Karte und entscheidet aus der Geometrie, wann eine öffnet OFFEN OpenAPI zur Laufzeit unter /api-docs
Aufzug und Ebenenwechsel eigener Dienst Warteposition, Fahrtanforderung, Kartenwechsel, Neulokalisierung, Fortsetzen — als eine Kette OFFEN OpenAPI zur Laufzeit
Kartenabgleich POST /mapSync/sync-now Eine Karte von einem Roboter auf einen anderen bringen und dort neu lokalisieren, in einem Aufruf OFFEN OpenAPI zur Laufzeit
Bewegungshoheit POST /…/desired-moves, …/ownership, …/moves/:id/pause, …/resume Absichten statt Fahrbefehle. Siehe unten OFFEN Entwurf
Sprachdienst /api/chatbot/*, /api/intercommunicator/*, /api/wake-word/* Wachwort, Kontext, Phrasenbefehle, Sprachstrecke OFFEN /docs-json zur Laufzeit
u-IoT-Modul REST Digitale Ein- und Ausgänge, Ruftaster, Aktionsregeln ohne — deshalb nur im geschützten Netz Beschreibung steht aus
Anmeldedienst der Cloud POST /anmeldung Genau ein Pfad: aus einer Zertifikatsanfrage wird ein Gerätezertifikat Beitrittscode, einmalig Cloud, 3.8
Cloud, Themenbaum urg/<umgebung>/geraet/<seriennummer>/… Zustand, Kennzahlen, Störung, Karte, Update, Wartungssitzung Zertifikat je Gerät Cloud, 3.2

Warum bei fünf Zeilen „offen" steht, wo eine Anmeldung stehen müsste. Diese Dienste laufen heute im geschützten Netzabschnitt und prüfen keine Kennung. Das ist tragbar, solange der Abschnitt trägt, und es ist der Punkt, an dem die Bewegungshoheit zuerst einen Schlüssel braucht: sie wird das eine lohnende Ziel, sobald alle Fahrbefehle durch sie laufen.

4.3 Die Regel, die über allen steht: ein Schreiber

Ein Fahrgestell dieser Klasse nimmt einen neuen Fahrbefehl an, indem es den laufenden ersetzt — still, ohne Warteschlange und ohne Begriff von Eigentum. Zwei Bauteile, die beide das Richtige wollen, unterbrechen sich deshalb gegenseitig.

Die Antwort darauf ist eine Architekturregel und kein Feld in einer Konfiguration:

Genau ein Bauteil je Roboter setzt Fahrbefehle ab. Alle anderen reichen eine Absicht ein und lassen sich sagen, wann sie fahren dürfen. Lesende Verbindungen bleiben unmittelbar.

Für einen Partner, der gegen diese Plattform baut, hat das eine unmittelbare Folge: eine Anbindung, die selbst POST auf das Fahrgestell schickt, ist heute möglich und wird morgen im Weg stehen. Wer neu anbindet, reicht Absichten ein.

Zwei Verben, die dazugehören und die es ohne diese Regel nicht geben kann:

Verb Was es tut
pause Hält einen Auftrag, ohne ihn abzubrechen. Jeder Anhaltende gibt seinen eigenen Halt wieder frei; mehrere Halte schliessen sich nicht aus. Der Auftrag behält seinen Eigentümer und muss danach nicht neu vergeben werden
resume Gibt den eigenen Halt frei. Dass danach noch jemand hält, ist kein Fehler, sondern die Auskunft, dass die Fahrt noch aus einem anderen Grund steht

Der Unterschied zum bisherigen Weg ist der ganze Punkt: ein Abbruch mit anschliessender Neuvergabe sieht für den Auftraggeber aus wie ein Fehlschlag. Ein Halt sieht aus wie eine Wartezeit — und genau das ist eine geschlossene Tür.

4.4 Karten und ihre Identität

Zwei Roboter, die über dieselbe Karte reden, brauchen einen gemeinsamen Namen dafür. Der örtliche Zähler taugt nicht: dieselbe Karte, auf zwei Geräte kopiert, bekommt dort verschiedene Nummern, und auch die vom Gerät vergebene Kennung wird beim Kopieren neu vergeben. Nur der Name überlebt eine Übertragung, und ein Name ist kein Schlüssel.

Woran ein Dienst deshalb erkennt, dass sich die Karte geändert hat:

Weg Wie Bewertung
Regelmässig GET /chassis/current-map fragen einfach Kostet einen Abruf im Takt und merkt eine Änderung erst beim nächsten
Das Thema /map/info auf dem WebSocket bestellen Das Thema ist gehalten: der aktuelle Stand kommt sofort beim Verbinden und danach bei jeder Änderung Der bessere Weg. Kein Abfragetakt, keine Verzögerung

Erkannt wird eine Änderung am Paar (Kennung, Zeichnungsfassung) — eine andere Karte oder dieselbe Karte mit neuen Zeichnungen. Und die Regel, die dazugehört: solange die Karte nicht bekannt ist, wird nichts ausgelöst. Auf der Geometrie eines anderen Stockwerks zu handeln ist schlimmer, als gar nicht zu handeln.

4.5 Was maschinenlesbar vorliegt und was nicht

Vertrag Art Zustand
uGo-Server REST Vollständig beschrieben, siehe uGo-Server. Eine erzeugte Datei gibt es nicht
Fahrgestell REST Beschrieben aus Messung. Der Hersteller liefert keine Datei, die wir weitergeben dürften
Cloud MQTT/JSON Beschrieben, siehe Cloud
Tür, Aufzug, Ebenenwechsel, Kartenabgleich OpenAPI 3 Wird zur Laufzeit ausgeliefert, aber nicht in eine Datei geschrieben — deshalb steht sie hier nicht
Sprachdienst OpenAPI 3 dito, unter /docs-json
u-IoT REST OFFEN — Beschreibung steht aus

Der eine Schritt, der diese Tabelle grün macht: jeder Dienst, der seine Beschreibung schon zur Laufzeit erzeugt, schreibt sie zusätzlich beim Bauen in eine Datei und legt sie neben das Ergebnis. Dann kann dieses Portal sie einbinden, statt sie zu beschreiben.