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.
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
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
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
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
-
- 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
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
-
- Reactions:
- Beiträge: 2322
- Registriert: Sa Sep 15, 2018 10:26 am
- Wohnort: Kerpen
- Hat sich bedankt: 895 Mal
- Danksagung erhalten: 700 Mal
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
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
-
- Reactions:
- Beiträge: 296
- Registriert: So Aug 12, 2018 11:55 am
- Wohnort: Krumbach
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 114 Mal
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
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
-
- Elaborated Networks
- Reactions:
- Beiträge: 9750
- Registriert: So Aug 12, 2018 9:27 am
- Wohnort: Frauenneuharting
- Hat sich bedankt: 4868 Mal
- Danksagung erhalten: 7766 Mal
- Kontaktdaten:
Hallo Martin,
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.
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
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.
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.
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.
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.
-
- Reactions:
- Beiträge: 296
- Registriert: So Aug 12, 2018 11:55 am
- Wohnort: Krumbach
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 114 Mal
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
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
-
- Reactions:
- Beiträge: 296
- Registriert: So Aug 12, 2018 11:55 am
- Wohnort: Krumbach
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 114 Mal
Manchmal geht etwas schneller wie erwartet.
Das Skript wurde von bachya angepasst und nun kommen die Werte alle so wie sie sollen
Gruß,
Martin
Das Skript wurde von bachya angepasst und nun kommen die Werte alle so wie sie sollen
Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache