NEWS
String aufteilen
-
@mickym Ja, so läufts richtig.
-
@mickym Ich würde noch gerne bei meinen Rechner aufräumen. Es gibt folgende 4 Operationen:
- (Number(msg.payload) - 1) * 60;
- (Number(msg.payload) + Number(msg.min)) * 60000;
- payload x 60000;
- Number(msg.payload) + Number(msg.lauf)
Für die Nummer 3 habe ich Testweise den Calculator genommen, die anderen Laufen im Functions Node. Macht es Sinn alle in das Functions Node zu setzen, oder wie macht man das am besten? Mit dem Change Nod habe ich seltsame Resultate erhalten und das Aggregator Node scheint nicht dafür gedacht zu sein.
-
@hafo Ich habe aber auch gerade mal die sort Node getestet und die funktioniert schon, aber nachdem ich sie nicht genutzt hatte habe ich auch etwas gebraucht.
Wenn Du die split Node nicht anfasst - dann kannst Du einfach folgende Sort Node vorne dran hängen. Da Du Deine Datenpunkte ja durchnummeriert hast, bleibt die Reihenfolge.
Hier mal eine Demo:
Mit dieser Inject-Node habe ich Objekt indem die Eigenschaften unsortiert im Objekt stehen
Zur Veranschaulichung habe ich in der split Node den key (also die Eigenschaft oder der Name des Datenpunktes in den Topic kopieren lassen). Das braucht man aber nicht, da ich wie Du sieht in der sort Node ein anderes Sortierkriterium genommen habe.
Also das dient nur zur Illustration:
Die Ausgabe des Split-Nodes ist deshalb auch in der Reihenfolge des Objekts und deshalb durcheinander:
Die Debug Node nach der Sort Node gibt es in der IMMER richtigen Reihenfolge aus - es wäre also in Deinem Fall die SICHERERE METHODE
Was man verstehen muss - dass die Standardeinstellung ein Array sortiert und wir wollen aber eine Nachrichtensequenz und können uns an msg.part.keys zunutze machen, die die split Node automatisch generiert:
so habe ich auch wieder was gelernt.
Hier der Flow zum Spielen:
EDIT:
Wenn man die sort Node, wie im Standard nutzt, dann sortiert man innerhalb einer Nachricht - zum Beispiel ein Array:
-
@hafo sagte in String aufteilen:
@mickym Ich würde noch gerne bei meinen Rechner aufräumen. Es gibt folgende 4 Operationen:
- (Number(msg.payload) - 1) * 60;
- (Number(msg.payload) + Number(msg.min)) * 60000;
- payload x 60000;
- Number(msg.payload) + Number(msg.lauf)
Für die Nummer 3 habe ich Testweise den Calculator genommen, die anderen Laufen im Functions Node. Macht es Sinn alle in das Functions Node zu setzen, oder wie macht man das am besten? Mit dem Change Nod habe ich seltsame Resultate erhalten und das Aggregator Node scheint nicht dafür gedacht zu sein.
Ehrlich gesagt verstehe ich es nicht.
- Was macht denn die Aggregator Node nicht, was der Calculator macht?
- Ja ich würde alle übrigen Rechenoperation mit der Change Node machen.
Gib mir einfach mal eine Inject Node mit
msg.payload, msg.min und msg.lauf und ich führe Dir die 4 Rechenoperationen in einer Change Node aus und gebe das Ergebnis in der msg.payload aus.Warum wandelst Du alles in eine Nummer / Zahl um, hast Du etwa den Haken in der Adapterkonfig nicht rausgemacht?
Das sage ich jedem immer als aller Erstes!!!! -
@mickym Hier das inject
Ich habe im Changenod einmal Payload * 60000 getestet und ein etwas seltsames Resultat erhalten.Ich habe gerade keine Ahnung was du mit dem Haken in der Adapterkonfig meinst.
Gemäss Beschreibung dient das Aggregator Node eher zum sammeln von Nachrichten über einen längeren Zeitraum. -
Ich habe noch ein bisschen mit der sort Node rumgespielt und dabei ein paar ganz gute Erkenntnisse gewonnen. Wenn Du willst dann poste ich sie hier mal im Thread - später.
-
@hafo sagte in String aufteilen:
@mickym Hier das inject
Ich habe im Changenod einmal Payload * 60000 getestet und ein etwas seltsames Resultat erhalten.Ich habe gerade keine Ahnung was du mit dem Haken in der Adapterkonfig meinst.
Gemäss Beschreibung dient das Aggregator Node eher zum sammeln von Nachrichten über einen längeren Zeitraum.Und damit führe ich jetzt die 4 Rechenoperationen von unten aus?
-
@mickym Genau, damit bin ich gerade fertig geworden. Ich habe nun den Flow gelöscht welcher die Flow Variable bei einem Neustart neu initialisiert. Aber der String wird immer noch richtig generiert, von daher habe ich das Sort Node einfach zum sicher sein eingebaut.
-
@hafo Moment, ich bereite dir gerade den original Flow vor.
-
@hafo sagte in String aufteilen:
@hafo Moment, ich bereite dir gerade den original Flow vor.
Na brauchst nicht - ich mach Dir für jeder Operation eine Change Node und von mir aus zum Schluss nochmal ein mit allen zusammen.
-
-
@hafo Nun ich verstehe einfach das Problem nicht??
Habe hier 4 mal das gerechnet was Du unten angegeben hast:
-
Ich sehe gerade dass ich da besser zuerst alle Daten einsammle und dann durch die Rechner laufen lasse. So langsam verstehe ich das Prinzip.
-
@hafo Na Du kannst sie HuckePack nehmen - das geht auch oder sammelst wieder in Flow Variable und schreibst zum Schluss.
Ich sags immer wieder - Nachrichten warten nicht auf Dich und wenn nichts gespeichert wird, ist die Nachricht, hat sie mal eine Node passiert, Schall und Rauch.
HuckePack kannst Du sie nehmen, wenn Du Deine Get-Nodes alle in unterschiedliche Eigenschaften speichern lässt, dann schleppst Du die im Nachrichtenobjekt mit und kannst dann damit rechnen!
Hier in Deinen get NOdes unterschiedliche Eigenschaften benennen, dann werden die mitgeschleift, sonst überschreibst Du die payload ja immer wieder:
Schau Dir halt auch in den Debug Nodes in solchen Fällen nicht nur die Payload sondern das gesamte Nachrichtenobjekt an!!!
Ich weiß am Anfang braucht es etwas - damit man versteht was Nachrichten und ein Nachrichtenobjekt ist. Aber wenn Du das mal verstanden hast, dann spielst Du in NodeRed wie ein Pianist auf dem Klavier.
-
@mickym Danke, das habe ich schon mal gemacht mit dem HuckePack.
Ich habe nun aber dein "Nummer / Zahl" Problem."Invalid JSONata expression: The left side of the "-" operator must evaluate to a number"
-
@hafo Wie gesagt - Du bist nicht meiner Empfehlung gefolgt und hast die Stringkonvertierung in dem Adapter ausgeschaltet.
Du kannst das entweder jetzt machen - musst halt aufpassen, ob Du nicht schon viel konvertiert hast oder musst halt immer weiter konvertieren.
Wenn Du weiter konvertieren willst, dann musst halt alles mit $number() in JSONATA umwandeln oder Du liest Zahlen, die im iobroker als Zahl definiert sind auch als Zahl aus und machst diesen unsäglichen Haken raus!!!
Ansonsten kannst Du auch in JSONATA weiterhin Zahlen konvertieren:
-
@mickym Nein, der Haken ist bei mir gesetzt. Aber vielleicht habe ich bei den Objekten etwas falsches eingestellt.
-
@hafo sagte in String aufteilen:
@mickym Nein, der Haken ist bei mir gesetzt.
Aber vielleicht habe ich bei den Objekten etwas falsches eingestellt.
Das ist doch das Problem!!!! Haken raus!!!!
Mit gesetztem Haken kann im Datenpunkt stehen was will - es wird alles in Strings gewandelt!
-
@mickym Ich glaub ich bin schon zu lange am Computer
Jedenfalls triggert er nun wieder in alle unendlichkeit
-
@hafo Nein - Du hast nun umgestellt und nun kommen auch Deine booleans als booleans und nicht mehr als String.
Das ist jetzt vielleicht leider Umstellungsaufwand - deswegen empfehle ich den Haken von Beginn an rauszunehmen, sonst kannst halt weiter konvertieren.
Du kannst den Haken ja erst mal wieder rein nehmen und dann anfangen zu suchen:
Wenn Du im JSONATA konvertieren willst, dann geht das schon
Ich finde es auf Dauer umständlich, aber wie gesagt nun musst Du erst mal schauen, wo Deine Datentypen nicht mehr passen.