Hallo Martin,
Advenoni hat geschrieben: ↑Fr Jun 04, 2021 10:11 pmnachdem MQTT ja viel zum ausprobieren anregt
Unbedingt, bitte nutzt die neuen Möglichkeiten und bitte berichtet darüber. Weil das regt auch andere Nutzer an weitere Geräte und Funktionen nun zu integrieren.
Advenoni hat geschrieben: ↑Fr Jun 04, 2021 10:11 pmwollte ich von mir zwei Feuchtesensoren im Hochbeet über MQTT auswerten.... Soweit funktioniert das Ganze, nur werden ein Teil der Zahlen (Feuchte und Batteriespannung) als String geschickt.
Das ist ein starkes Stück. Da hat der Entwickler wohl nicht ganz aufgepasst.
MQTT Spezifikation: Die Datenübertragung
Bei MQTT ist leider ein gewisser WIldwuchs möglich, weil es gibt gar keine Übereinkunft was im Payload stehen darf. Vom Protokoll her sind maximal 268.435.455 Bytes (rund 260 MB) in einer Message erlaubt (auch wenn die meisten Broker / Clients das nicht zulassen). Was dann in dieser Datenmenge kodiert ist, ist dem jeweiligen Sender überlassen.
Alle Daten werden ÜBLICHERWEISE als String gesendet, bei "Zahlen" nur ohne Anführungszeichen. Das verhält sich wie beim CSV Format, das ist binär ebenfalls als Zeichenkette kodiert, Zahlen werden mithin als Folge arabischer Ziffern plus Dezimaltrennzeichen im Datenstrom dargestellt.
Es handelt sich bei Zahlen in MQTT also ÜBLICHERWEISE nicht um ein binäres Zahlenformat wie 32-Bit-Signed-Integer oder 64-Bit-Float oder ähnlichem (so wie das ÜBLICHERWEISE bei Modbus übertragen wird) sondern um einen ZUMEIST UTF-8 kodierten String, der menschlich lesbare arabische Ziffern beinhaltet.
Die Besonderheit in diesem Fall ist, dass nun einzelne Zahlendarstellungen noch mit Anführungszeichen umfasst sind, was diese als String (im großen String) nach JSON Formatnotation kennzeichnet.
==> Das ist hier eindeutig falsch kodiert, weil in JSON sind Zahlen nicht als String mit Anführungszeichen zu kodieren (Boolesche Werte mit den Schlüsselwörtern true und false übrigens auch nicht).
==> Die empfehlenswerte Maßnahme wäre, den Entwickler auf GitHub darauf hinzuweisen, dass sein Format eben nicht der JavaScript Object Notation entspricht. Weil da fallen dann sicher auch andere darüber.
Advenoni hat geschrieben: ↑Fr Jun 04, 2021 10:11 pmGibt es hier eine Möglichkeit das in eine Zahl zu wandeln?
Jein. Das kommt auf das zu verknüpfende Ziel an.
Eines der Projekte an denen wir arbeiten, ist dieses Leistungsmerkmal: Die automatische Typkonvertierung
Die jeweiligen Subsysteme wandeln damit den verknüpften Quell-Datentyp (im Rahmen der Möglichkeiten) bei der Weiterleitung auf das jeweils eigene Objekt. Das passiert immer EINGEHEND. In den Technologien Modbus und MQTT ist das bereits umgesetzt, für 1-Wire wird das derzeit entwickelt. Bei den anderen Technologien (wie z.B. Zeitserien, Logik) usw. kenne ich den Status gerade nicht. Womöglich liest das ein Entwickler und kann dazu noch eine Aussage machen.
==> Insofern, einfach mal ausprobieren, ob der Verknüpfungsassistent (aka "DOS") das Verknüpfen erlaubt und die Konvertierung von String auf Integer / Float ermöglicht.
Hinweis: Bei Konvertierungen die zu Datenverlust führen, z.B. Float auf Boolean, zeigt der Verknüpfungsassistent (aka "DOS") ein Ausrufezeichen an, ein Tooltipp erklärt dazu, dass dies eine verlustbehaftete Konvertierung ist.
Hinweis: Dieses neue Leistungsmerkmal der automatischen Typkonvertierung ist noch nicht durchgängig implementiert, sondern befindet sich in Teilen noch in der Implementierungsphase, daher haben wir hierzu noch nicht soviel erwähnt. Aber es soll die Konfiguration nochmal vereinfachen, weil die Objekte unterschiedlicher Objekttyen werdend damit - im Rahmen der Möglichkeiten - noch einfacher verknüpfbar.
lg
Stefan