MQTT Topics: Device-Name konfigurierbar?

Die MQTT-Messages haben ja einen Topic-Namen, der nach folgendem Muster aufgebaut ist (hier eine Message vom Typ “plain” von einem HomeMatic-Thermostat):

homegear/default/plain/1/4/CONTROL_MODE

Die “1” in der Mitte ist die laufende Nummer des Devices, wie es von Homegear vergeben wurde (die “4” ist der Channel in dem Device).

Die Device-Nummer ist ja willkürlich und vor allem nicht sprechend. Bei 1 oder 2 Devices kann man sich das noch merken, aber wenn man viele viele Devices hat, sind die Topics nicht so einfach zu einem Device zuzuordnen.

Gibt es eine Möglichkeit, statt der Device-Nummer einen sprechenderen Namen zu konfigurieren und im Topic zu erhalten? Ich denke da z.B. an den Namen, den man ja für Devices selbst vergeben kann (Kommando “peers setname”), oder die Serial-Number, die Homegear ja auch kennt. Wobei der selbst definierte Name natürlich viel besser verständlich wäre.

Grüße,
Klaro

Sers @Klaro,

finde ich eine gute Idee.

@sathya, könnte man das einbauen? Eventuell in der mqtt.conf konfigurierbar? Fallback könnte ja immer die Device-ID sein, oder?

Wenn das eingebaut würde, wäre mein Vorschlag, dass man in der mqtt.conf einerseits Mappings konfigurieren kann (optional, pro Device eine Zeile), andererseit den Fallback angeben kann, der die Peer-ID (default), die Peer-Adresse oder der Peer-Name sein kann. Letzterer muss ja nicht exitieren, sodass es da dann wieder einen Fallback auf die ID geben müsste. Außerdem kann es sein, dass der Name Zeichen enthält, die als Topic-Bestandteil nicht erlaubt sind; diese müssten dann geeignet dekodiert werden.

Wäre knorke :star_struck:, das Feature zu bekommen.

// Klaro

Mhmm, also ein Mapping in der mqtt.conf selbst halte ich nicht für so gelungen.
Dort steht ja nur die grundlegende Konfiguration zum Protokoll drin.
Es geht ja um die aktiven Daten, die das Protokoll transportiert.

Generell würde das mit dem “peers setname” doch reichen.
Allerdings würde ich eher vorschlagen, dass man zusätzlich ein “peers setmqttname” einführt oder das über ein zusätzliches Attribut in Form von Metadata regelt.

Was meint denn @sathya dazu?

1 Like

Hallo,

das ursprüngliche Mapping sollte schon erhalten bleiben, da in Homegear alles über die ID angesprochen wird. Aber zusätzlich ist es prinzipiell überhaupt kein Problem und ich bin absolut dafür. Das Topic sollte aus meiner Sicht sinnigerweise im Gerät konfiguriert werden (Systems::Peer) und eine Konfiguration über RPC möglich sein (wie bei setName()). Den Namen würde ich dafür nicht verwenden, so lassen sich Gerätename und Topic noch einmal trennen.

Die Implementierung ist aber schon etwas Arbeit und muss leider noch etwas warten - außer jemand anders macht es :stuck_out_tongue:.

Viele Grüße

Sathya

Ich weiß das das Thema schon älter ist aber ich habe genau das Feature gerade auch gesucht. Aus meiner Sicht würde der Name der mit peers select vergeben würde sehr gut passen.

Ich fände auch den Namen hier am sinnvollsten. Allerdings sollte man vorher Problemzeichen ersetzen. Zum Beispiel durch _ oder gar nichts. Es bestimmt Anwender die Gerätenamen a la “Bewegungsmelder unter der Dachschräge (Hm/IP?; Gekauft am 27.11.'07 für 13€)” verwenden. Das könnte sonst problematisch mit den Topics werden. :wink:

1 Like

Also dann /<Name>/<Kanal>/<Variable>?

Was machen wir, wenn ein Kanalname existiert? Dann nur <Kanal>/<Variable>?