NEWS
MQTT Datenpunkte ohne Anzeigewert (IR-Lesekopf, Stromzähler)
-
Habe jetzt nur in der Inject den String rein kopiert sonst noch nichts geändert
Passt das so? -
@bastel2021 Nein in Deiner Change Node passt das noch nicht. Klapp mal im Debug Fenster das Objekt auf und kopiere den Pfad in die Change Node.
Pder kopiere mal den String hier in CodeTags, dann übernehme ich das in meinen Flow.
Mach mal einen Screen shot vom Inhalt Deiner Change Node.
-
-
{"Time":"2023-01-28T14:51:52","ED300L ":{"Total_in":3164.3,"Total_out":0,"Power_curr":190.8}}
-
@mickym Na da steht ja noch [mqtt1] drin.
wie gesagt geh ins Debug Fenster mach das Objekt auf - und kopieren den Pfad in die Change Node, in dem Du neben den Wert mit der Maus gehst der Dich interessiert und dort kopierst Du den Pfad.
-
Jetzt sieht es auf jeden Fall erstmal richtig aus!
Wenn ich den Pfad kopiere dann kopiere ich: 190.8
Es sollte aber das sein;["ED300L "].Power_curr oder? -
@bastel2021
und welches Debug Fenster meinst du? Das hinter der json node? -
@bastel2021
ja natürlich, da sind die werte ja getrennt. Blöde Frage
Aber wie gesagt wenn ich den Pfad kopiere dann steht da nur der Wert -
@bastel2021 sagte in MQTT Datenpunkte ohne Anzeigewert (IR-Lesekopf, Stromzähler):
@bastel2021
und welches Debug Fenster meinst du? Das hinter der json node?Ja Du kopierst den Pfad neben dem Wert, der Dich interessiert in Deine Change Node:
-
@mickym
Hm, Fehler gefunden! Sorry nicht Wert kopieren sondern Pfad -
@bastel2021 sagte in MQTT Datenpunkte ohne Anzeigewert (IR-Lesekopf, Stromzähler):
@mickym
Hm, Fehler gefunden! Sorry nicht Wert kopieren sondern Pfad -
@mickym
Hm habe das nochmals nachgebaut und bei mir bekomme ich den Wert nicht raus!
Irgendwas ist noch falsch!
Wenn ich in der Inject Node den Pfad kopiere steht da nur; payload
Kopiere ich den Wert dann: {"Time":"2023-01-28T15:46:52","ED300L ":{"Total_in":3164.5,"Total_out":0,"Power_curr":202.2}}
D.h. in der Inject muss ich den Wert kopieren, richtig?
Und trotzdem Wird bei dem was ich nachgebaut habe kein Wert in der letzten Debug angezeigt -
Merkwürdigerweise kommt aus der debug9 nichts raus. Aber warum?
-
@bastel2021 Klar in die Inject Node kopierst Du den Wert. Wenn Du den so kopierst wie in den Code-Tags dann brauchst Du die JSON Node nicht, wenn Du es als Objekt definierst.
Wenn du es als String in die Inject Node kopierst, dann musst mit einer JSON Node noch umwandeln
-
@bastel2021 Du hast das wie eben geschrieben in Deiner Inject entweder als String oder Objekt definiert. Wenn Du eine json Node dahinter klemmst und es war schon ein Objekt wird es in einen String verwandelt umgekehrt, war es ein String dann in ein Objekt.
In Debug 8 sieht es nun so aus, als ob du in die Inject Node einen String eingegeben hast. Deswegen enthält die debug 9 das Objekt. Wenn du es gleich als Objekt in der Inject node definierst dann brauchst Du die Umwandlung nicht.
Ich hab Dir das ja im vorherigen Post dargestellt.
-
@mickym
okay soweit ist das klar, und ich kann das auch Simulieren!
Nach der Change Node ist dann aber bei beiden Versionen schluss. Hast du eine Idee warum1.Variante
- Variante
-
@bastel2021 Du setzt die payload auf einen String und nicht auf ein Nachrichtenobjekt:
Falsch:
Richtig:
Ich erkenne auch keinen Unterschied zwischen Deinen beiden Varianten.
-
@mickym
Mit Brille wäre das nicht passiert! Also in der Change lag der Fehler.
Die Varianten waren nur Inject - String und Injekt - Objekt -
@bastel2021 Also mal ganz generell:
Hier mal die Begrifflichkeiten erklärt und die Datentypen : https://forum.iobroker.net/post/852974
und hier: https://forum.iobroker.net/post/905403Das zu verstehen, welche Datentypen es gibt in Javascript ist essentiell für NodeRed, Blockly, JS Programmierung generell und somit auch für den iobroker.
Im Prinzip kannst Du Dir einfach merken, dass Du mit einem JSON String einfach Javascript-Objekte als String (Zeichenkette) zwischen verschiedenen Systemen (z. Bsp. Browser) austauschen kannst und dabei die Datentypen erhalten bleiben.
Wenn Du in einer Inject Node ein Objekt selbst erstellst:
nutzt Du die geschweifte Klammer - dort kannst Du dann über den JSON Editor das manuell eintragen:
oder Du nutzt den visuellen Editor um Werte in deinem Objekt zu definieren (nächster Tab):
-
@bastel2021 Wenn Du nur einen reinen String hast, dann musst Du mittels JSON in ein Objekt umwandeln:
Die obere Inject Node definiert direkt das Objekt:
die untere nur den String:
und muss deshalb via JSON node noch in ein Objekt umgewandelt werden.
Deshalb:
Aus der iobroker-IN Node erhälst Du nur den String, deshalb musst Du da dann noch eine JSON Node dranhängen!