NEWS
Visualisierung mit Node Red erstellen
-
@damrak2022 Im Gegenteil - hier hast Du nun 14 Nachrichtenobjekte die Du zusammenführen müsstest und nicht nur 2, wie bei der systole und diastole.
Nun würde sich eine der beiden anderen Wege anbieten mit einer weiteren JOIN Node das erst mal zu einem Array zusammenzufassen.Du denkst nicht zu umständlich, sondern zu einfach. Du kannst keine 14 Nachrichtenobjekte mit einer Change Node zusammenfassen. Ich dachte Du hättest das verstanden, als wir das Problem mit der Systole und Diastole hatten, wo du ja nur 2 Nachrichten in ein Objekt zusammenfassen musstest. Der Kontext ist hier nur halb glücklich, weil Du nicht weisst, wann alle 14 Nachrichtenobjekte fertig sind. Deshalb würde sich hier eine weiter JOIN Node anbieten, in die Du alle Nachrichtenobjekte reinlaufen lässt. Bevor Du das aber machst - mach das was ich Dir gesagt habe. Ändere die vorhandenen JOIN Nodes - nimm die Formatierung raus und mach die mit einer anschließenden Change Node extra bzw. formatiere von mir aus nur in der Text Node. Denn dann brauchst Du die Werte ja als Zahl.
-
@mickym Das muss ich erst noch ein paar mal lesen und kapieren. Ich weiß das Du mir das mit der Join Node weiter oben erklärt hast und werde mir das nochmal anschauen.
-
@mickym Können wir das mit dem zusammenführen der Nachrichtenobjekte nochmal machen? Ich bekomme das nicht hin. Dann kann ich das auch gleich, bzw. direkt danach aufschreiben, das ich es beim nächsten Mal echt alleine hinbekomme. Wenn ich die join node wegnehme und direkt hinter die Change node eine Debug node hänge, bekomme ich alle Werte des Jahres als Number angezeigt.
-
@damrak2022 Du sollst nicht die JOIN Node wegnehmen, sondern nur die Formatierung aus der JOIN Node (also dem fixup) und diese dafür in eine anschliessende Change Node auslagern.
-
@mickym Okay, habe ich gemacht. So richtig?
Beim Debug kommt dann allerdings undefined
-
@damrak2022 In der Change Node musst du natürlich das $A gegen payload austauschen.
-
@mickym Ah okay, dann bekomme ich die Jahressumme angezeigt als Number
Was bewirkt das $A ? Das er alle Werte addiert? -
Der Reduktionsausdruck $A + payload wird also bei jeder eingehenden Nachricht ausgeführt.
Theoretisch kannst Du auch andere Operationen ausführen. Alles was Du mit JSONATA machen kannst.Richtig das ist die Summe, die sich ergibt.
Nehmen wir mal der Einfachheit an - nach der Split Node kommen 3 Nachrichten aus:
- payload = 10.06
- payload = 15.3
- payload = 72.55
dann schau Dir die JOIN Node an:
Was passiert - der Anfangswert ist 0: deshalb wird $A auf 0 gesetzt:
- Nachricht kommt:
der Reduktionsausdruck wird ausgeführt: $A + payload, also 0+10.06. Neues $A=10.06. - Nachricht kommt:
der Reduktionsausdruck wird ausgeführt: $A + payload, also 10.06+15.3. Neues $A=25.36. - Nachricht kommt:
der Reduktionsausdruck wird ausgeführt: $A + payload, also 25.36+72.55. Neues $A=97.91.
Durch die split Node bekommt die JOIN Nachricht mit, wenn sie alle Nachrichten bekommen hat - deswegen funktioniert das nur, wenn eine msg.parts Eigenschaft in der Nachricht enthalten ist.
In der msg.parts Eigenschaft siehst Du wenn Du Dir wieder die Hilfe der JOIN Node anschaust, dass diese folgenden Informationen enthält.
Deshalb weiß die JOIN Node wann die Summe entgültig ist und verschickt die payload als Summe.
Mach mal eine Debug NOde hinter die Split Node und schau Dir mal die VOLLSTÄNDIGEN NACHRICHTENOBJEKTE an.
Mach das mal und poste mal so ein vollständiges Nachrichtenobjekt.
-
@mickym Das sieht dann so aus:
-
@damrak2022 Tja und daraus erkennst Du aus dem msg.parts Objekt, dass das das 18. Element eines Arrays mit 25 Elementen ist, welches Du gepostet hast.
-
@mickym Ja okay hier sieht man es:
-
@damrak2022 Genau - wichtig ist, dass Du es verstehst und nun weißt was eine JOIN Node beim Sequenz reduzieren macht.
-
@mickym Okay $A wird auf 0 gesetzt und zählt dann nach und nach alle Payloads zusammen
-
@damrak2022 Ja so wie ich es unten beschrieben habe.
Wie müsste denn der Reduktionsausdruck aussehen, wenn ich 4 Nachrichten mit folgenden payloads habe:
- Nachricht: payload = "A"
- Nachricht: payload = "n"
- Nachricht: payload = "d"
- Nachricht: payload = "y"
Und alle payloads mit einander zu "Andy" kombinieren möchte. Darf ein Anfangswert gesetzt werden oder nicht?
-
@mickym Ich vermute so:
Es ist ja ein string und kein Number
-
@damrak2022 Warum Du den Anfangswert aus A setzt weiß ich nicht. Aber mit Zeichenketten kann man nicht rechnen.
Genau - wie Du sagst ist ein string und keine Zahl. Wie muss also der Reduktionsausdruck aussehen? Wie kombiniert mal also 2 Strings? - Haben wir schon oft gemacht.
-
@mickym Weiß ich gerade nicht
-
@damrak2022 sagte in Visualisierung mit Node Red erstellen:
@mickym Weiß ich gerade nicht
Tja - aber sowas muss im Kopf bleiben. Schau mal hier: https://forum.iobroker.net/post/886582
und schon mal einen Blick in die JSONATA Anleitung geworfen? https://docs.jsonata.org/other-operators
-
@mickym Wahrscheinlich trage ich es falsch ein, oder es fehlt ein Zeichen, weiß ich ehrlich gesagt nicht
-
@damrak2022 Genau
wie sieht also der Reduktionsausdruck aus?