Ich denke immer mal wieder darüber nach, ob ich irgendwie Variablenprofile unterstützen bzw. berücksichtigen sollte. Mich würden eure Meinungen zum Thema interessieren.
Beispiel: Ich setze aus meiner Topicstruktur heraus einen Link auf eine Statusvariable von einem Temperaturfühler. Dies führt dazu, dass der Wert dieser Variablen fortan unter dem entsprechenden Topic als Retained Message gepublisht wird.
Allerdings wird als Message derzeit immer „nur“ der numerische Wert verbreitet, also bspw. -1.0 oder 5.7 - selbst wenn die Variable ein Profil hat, in dem z.B. der Suffix " °C" definiert ist.
Das könnte ich ändern, so dass er in dem Fall den formatierten Wert publisht.
Aber ich bin mir unsicher, ob man das überhaupt will, oder ob es in der Kommunikation zwischen Geräten nicht eher lästig ist.
Umgekehrt ist es so, dass der Broker beim Empfang einer Retained Message gegenwärtig versucht, automatisch den geeigneten Variablentyp zu „raten“. Das kann klappen, aber es kann auch schief gehen.
Problematisch wird unter anderem, wenn unter einem Topic zuerst eine Retained Message mit einem numerischen Wert empfangen wird und anschließend kommt ein Wert, der nicht numerisch darstellbar ist. Also bspw. zuerst „123“ und später „Hallo“. Dann erzeugt der Broker zunächst die Variable mit dem entsprechenden Namen als Integer. Anschließend muss er jedoch eine Korrektur vornehmen. Momentan äußert sich das so, dass er die bisherige Variable umbenennt und eine neue, mit dem Typ String, erstellt unter dem alten Namen.
Das Verhalten finde ich auch nicht perfekt, aber da es in MQTT keine Datentypen gibt, ist mir nichts anderes eingefallen. Alternative wäre, dass automatisch angelegte Variable immer Strings sind und man andere Typen immer händisch anlegen müsste.
Variablenprofile könnte man theoretisch ebenfalls wieder berücksichtigen beim Empfang, aber da wird es schnell kompliziert. Angenommen, ich empfange „21.3 °C“ als Message - wenn ich dann will, dass da automatisch ein geeignetes Profil heraus gesucht und verwendet wird ist das zwar vom Endergebnis her „schick“, aber alles andere als trivial.
Zumindest wenn einer Variablen manuell ein Profil zugewiesen wurde, könnte ich es so einrichten, dass es einen Effekt hat. Bspw. wenn ein Wert nur entweder „Online“ oder „Offline“ sein kann, wäre zu überlegen ob ich es dem User ermögliche, an dieser Stelle anstelle einer String-Variable z.B. eine Boolean mit entsprechenden Associations im Profil anzulegen (also etwa true = „Online“, false = „Offline“ oder so).
Was meint ihr so…?