= MQTT Topic-Struktur [[PageOutline(2-6)]] Betrachtungen zum Topic-Tree unter folgenden URLs: * https://pi3g.com/2019/05/29/mqtt-topic-tree-design-best-practices-tips-examples/ * https://raspberry-valley.azurewebsites.net/MQTT-Topic-Trees/ * https://d1.awsstatic.com/whitepapers/Designing_MQTT_Topics_for_AWS_IoT_Core.pdf == Topic-Struktur des Systems Die Topics im System sind folgendermaßen strukturiert: \\ `%prefix%/%location%/%topic%/%keyword%` \\ `%prefix%/%location%/%topic%/%keyword%/%metadata%...` \\ `mount/%location%/%prefix%/%topic%/%keyword%...` `%prefix%`:: beschreibt die Datenart, es sind folgende Datenarten definiert: * `cmd`: Kommandos an das Gerät * `log`: Meldungen vom Gerät, z.B. Sensor-Werte * `connected`: Meldungen zum Verbindungszustand eines Gerätes, Sensors etc. \\ inspiriert durch https://github.com/mqtt-smarthome/mqtt-smarthome/blob/master/Architecture.md * `feedback`: Status-Meldungen des Gerätes, i.d.R. als Reaktion auf Kommandos * `actuator`: direkter Zugriff auf einen Aktor eines Gerätes, benannt durch `%keyword%` * `sensor`: direkte Meldungen eines Sensors eines Gerätes, benannt durch `%keyword%` `%topic%`:: benennt das Gerät, den !Sensor/Aktor, die angesprochene Gruppe etc., welches auch Ort-Informationen tragen darf, ggf. mit Topic-Separator `/`, so daß sich evtl. (noch ungern gesehen) tiefere Topic-Strukturen bilden `%keyword%`:: ist spezifisch für das Gerät, den Sensor, den Aktor, die Gruppe etc. `%metadata%`:: ist optional bzw. noch in Entwicklung, als Ideen stehen hier Konventionen anderer Systeme Pate, so z.B.: * https://homieiot.github.io/ * https://tinkerman.cat/post/mqtt-topic-naming-convention `%location%`:: der physikalische Aufbauort des Gerätes, aktuell sind folgende Orte definiert * `ug`: Keller * `eg`: Erdgeschoss * `og1`: 1. Obergeschoss * `og2`: 2. Obergeschoss (Dachboden) * `garden`: !Hof/Garten/Schuppen * `roaming`: tragbare Geräte Unter `mount/#` werden ggf. Location-Broker gemounted und dann durch remapping in den richtigen Topic-Pfaden dargestellt. == Topics eines Gerätes Jedes Gerät meldet sich bei seinem Location-Broker an. Die Location-Broker sind für die verschiedenen Etagen aufgeteilt. Es sind folgende Location-Broker definiert: * Keller: `ug-broker.mqtt.p21.net:1884` * Erdgeschoss: `eg-broker.mqtt.p21.net:1885` * 1. Obergeschoss: `og1-broker.mqtt.p21.net:1886` * 2. Obergeschoss: `og2-broker.mqtt.p21.net:1887` * !Hof/Garten: `yard-broker.mqtt.p21.net:1888` * tragbare Geräte: `roaming-broker.mqtt.p21.net:1889` Diese Broker sind vorerst alle auf dem selben Host realisiert, daher benötigen sie entweder unterschiedliche IP-Aliase (knappe Ressource) oder unterschiedliche Port-Nummern (gewählte Option). Mehr in MqttBroker. Diese Location-Broker werden durch (Self-)Bridging in die Gesamtstruktur abgebildet. Daher darf jedes Gerät eine sehr einfache Topic-Struktur verwenden. Die Topic-Struktur orientiert sich an den Möglichkeiten der Tasmota-Software, weil diese die ersten Geräte stellt und bereits bewährte Strukturen abbildet. Geräte-Topics sind folgendermaßen strukturiert: \\ `%prefix%/%topic%/%keyword%` \\ `%prefix%/%topic%/%keyword%/%metadata%...`