NEU! UPGRADE IP 10 verfügbar!
Optimierte Darstellung von VISU Editor und VISU Client - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/8HzePCm3

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur IP 10
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[Gelöst] [V2.0 IP5] String innerhalb json in int bzw. float wandeln

Wissen, Planung & Diskussion zur MQTT Unterstützung im Timberwolf Server.
Stellt uns hier Eure MQTT Projekte und Ideen vor.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

[V2.0 IP5] String innerhalb json in int bzw. float wandeln

#1

Beitrag von Advenoni »

Abend zusammen,

nachdem MQTT ja viel zum ausprobieren anregt wollte ich von mir zwei Feuchtesensoren im Hochbeet über MQTT auswerten.
Es handelt sich um Sensoren von Ecowitt die über ein Docker auf MQTT verfügbar gemacht werden können.
Soweit funktioniert das Ganze, nur werden ein Teil der Zahlen (Feuchte und Batteriespannung) als String geschickt.
MQTT_String_Int.PNG
Gibt es hier eine Möglichkeit das in eine Zahl zu wandeln?
Einfach als Datentyp int oder float zu wählen führt leider zum Fehler, als String geht es problemlos.

Gruß,
Martin
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von StefanW am So Jun 06, 2021 6:39 pm, insgesamt 1-mal geändert.
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

blaubaerli
Reactions:
Beiträge: 2322
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 896 Mal
Danksagung erhalten: 700 Mal

#2

Beitrag von blaubaerli »

Hallo Martin,

ist ja abenteuerlich, in ein und demselben JSON als Quelle einige Zahlenwerte nativ als Zahlen und die nächsten als String? Oder kannst du das auf der sendenden Seite ggf. noch beeinflussen?

Beste Grüße
Jens
wiregate1250 & timberwolf168 (2600er), VPN offen, Reboot nach Vereinbarung
Bitte WIKI lesen.

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#3

Beitrag von Advenoni »

Hallo Jens,

Ja, das hat mich auch etwas verwundert...
Hab leider keinen Einfluss darauf wie die Daten gesendet werden. Geht alles über das Script von dem Docker Container.

Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

StefanW
Elaborated Networks
Reactions:
Beiträge: 9752
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4869 Mal
Danksagung erhalten: 7766 Mal
Kontaktdaten:

#4

Beitrag von StefanW »

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
Zuletzt geändert von StefanW am Sa Jun 05, 2021 10:46 am, insgesamt 3-mal geändert.
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#5

Beitrag von Advenoni »

Hallo Stefan,

vielen Dank für die ausführliche Antwort.
Bezüglich herumspielen kann ich schon mal sagen, dass es mit einem ESP32 sehr einfach ist Daten dann über MQTT mit dem TWS auszuwerten. Aber hierzu dann erst mehr wenn ich weiß, dass das Ganze auch zuverlässig läuft.

Ich werde dann mal den Author bei GitHub darauf hinweisen bzw. ansprechen.
Bin jetzt dann erst mal im Urlaub, kann also dauern bis ich mich dann wieder melde :-)

Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#6

Beitrag von Advenoni »

Manchmal geht etwas schneller wie erwartet.
Das Skript wurde von bachya angepasst und nun kommen die Werte alle so wie sie sollen :dance:

Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache
Antworten

Zurück zu „MQTT“