NEWS
Visualisierung mit Node Red erstellen
-
@mickym Danke, bei JSONATA war ich die ganze Zeit. Aber ich habe nirgends was gefunden, was ich da exakt eingeben muss.
Ich versuche den Code mal zu kapieren: Da der Ausgangswert Sekunden ist wird mit diesem Teil
$fromMillis(payload*1000
erstmal auf Sekunden gerechnet.
Aber wo findet denn die Division statt? Wahrscheinlich hier, kann ja nicht anders sein:[H00]:[m]:[s]')
Ich bin davon ausgegangen das die Division mit "/" angegeben wird
-
@damrak2022 sagte in Visualisierung mit Node Red erstellen:
@mickym Danke, bei JSONATA war ich die ganze Zeit. Aber ich habe nirgends was gefunden, was ich da exakt eingeben muss.
Eine kurze Beschreibung zu den Funktionen bekommst Du wenn Du diese halt durchschaust.
Ein komplette Funktionsreferenz bekommst Du hier: https://docs.jsonata.org/overview
Datums und Zeitfunktionen findest Du hier.
https://docs.jsonata.org/date-time-functionsZusätzlich und das habe ich in meinem Datums- und Zeitthread ist die moments Bibliothek noch eingebaut.
Diese Funktion geht allerdings nur bis zu 24 Stunden. Über 24 Stunden musst Du die Tage erst weg rechnen.
-
@mickym sagte in Visualisierung mit Node Red erstellen:
Danke, habe mir das mal als Lesezeichen angelegt. Mal schauen ob ich das verstehe.
-
@damrak2022 Nein hier wird gar nicht gerechnet. Funktioniert aber nur BIS ZU 24 Stunden - anderenfalls musst Du die Tage abrechnen. Ich gebe Dir aber unten den Weg, wie Du es herkömmlich ausrechnen würdest-
Diese Funktion gibt Dir bis zu 24 Stunden automatisch eine Umrechnung statt. Und zwar wird ein "Datum" gebildet aus der Zahl von milli-sekunden und formatiert Dir das dann. Wenn Du es richtig ausrechnen möchtest, dann musst Du richtig.
erst mal die Stunden ausrechnen.
Eine Stunde sind 60 min * 60 sec = 3600 sec
Das heisst Du rechnest erst mal den ganzzahligen Anteil der Stunden aus und rundest ab.
$floor(payload/3600) Stunden
Der Rest ist dann Minuten
payload%3600 ist dann der Rest in Sekunden. Das teilst dann durch 60 um die Minuten zu enthalten und nimmst auch wieder der ganzzahligen Anteil.
$floor(payload%3600/60)
Der Rest sind dann Sekunden.
payload%3600%60
Also wenn Du es ganz normal mathematisch ausrechnen wolltest würde das so aussehen:
$floor(payload/3600) & " Stunden " & $floor(payload%3600/60) & " Minuten " & payload%3600%60 & " Sekunden"
Die Floor Funktion rundet wie gesagt ab:
Ansonsten hast Du mit / als Division und %, also Modulo um den Rest zu ermittel natürlich recht:
-
@mickym Achso, na das muss man ja auch erstmal wissen. Aber danke dafür, denn jetzt habe ich das und kann jederzeit nachschauen.
-
@damrak2022 sagte in Visualisierung mit Node Red erstellen:
@mickym Achso, na das muss man ja auch erstmal wissen. Aber danke dafür, denn jetzt habe ich das und kann jederzeit nachschauen.
Ja das ist halt bis zu 24 Stunden ein kleiner Trick - um Dir die Rechnerei zu ersparen. Im Prinzip wenn Du 0 der Funktion $fromMillis() übergibst, wird das Datum auf 0 Uhr am 1.1.1970 gesetzt. Wenn Du nun 24660000 Millisekunden übergibst, dann entspricht das einen Datum von 06:51 am 1.1.1970 - da uns das Datum aber egal ist, kann man halt bis zu 24 Stunden das als schnelle Umrechnung verwenden. Ist halt ein kleiner Trick - aber ansonsten habe ich Dir ja im vorherigen Post gezeigt, wie man es normal und richtig ausrechnet.
-
@mickym Hast Du - Danke
-
@damrak2022 Wie gesagt ich hab das ja auch schon mal alles in meinem Datumsthread erklärt.
Wenn diese 24660 zum Beispiel auf ein Ereignis in der Vergangenheit hinweisen - also von jetzt 6 Stunden und 51 Minuten zurück, dann benutzt Du die mächtige moments Bibliothek:
So kannst Du Dir zum Beispiel das Datum und die Uhrzeit von vor 24660 Sekunden vom aktuellen Zeitpunkt ausgeben lassen:
$moment().subtract($$.payload,'seconds').locale("de").format('LLLL')
auch wenn die Bibliothek leider nicht mehr weiter entwickelt wird.
-
@mickym Ich habe das von Dir mit der Moments Bibliothek gelesen, aber ich bin da ziemlich schnell ausgestiegen, da ich es nicht wirklich kapiert habe. Aber ich komme ja in winzigen Schrittchen voran
-
@mickym Hallo, ich bin auch wieder da -
Jetzt habe ich zum wiederholten Male Deinen Beitrag gelesen, aber ich bekomme es natürlich wieder nicht hin.
Ich habe hier eine Datumsangabe, welche als String geliefert wird. Nun versuche ich schon seit gefühlt ewiger Zeit diesen so abzuändern, das er mir im deutschen Format, also DD - MM - YYYY angezeigt wird, scheitere aber kläglich.
Bestimmt kannst Du das in 5 Sekunden lösen.
-
@damrak2022 Die Frage ist, ob Du es selbst lernen willst - oder von mir in 5s einfach eine Lösung haben willst?
-
@mickym Natürlich lernen. Das geht bestimmt auch in der change node über JSONATA
-
@damrak2022Richtig - geht das über die Change Node und JSONATA - weil Du möchtest ja Deine payload ändern. Möchtest Du eine Lösung mit oder ohne die moments Bibliothek?
-
@mickym Ich glaube ohne wäre mir lieber, da ich erstmal die einfachen Sachen kapieren will
-
@damrak2022 Na die moments Bibliothek ist nicht so kompliziert. Ich hätte Dir ja geholfen. Aber gut - machen wir es ohne.
Damit behandeln wir die payload - die herein kommt als Zeichenkette.Ich geht also davon aus, dass die Zeichenkette:
2022-10-27
lautet.
-
@mickym So sieht die Debug aus:
-
@damrak2022 Nun dann habe ich ja richtig gedacht. Wie sind nun die einzelnen Datumsbestandteile voneinander getrennt?
-
@mickym Äh mit einem Bindestrich. Das geht auch mit ändere und setze. Aber das ist nicht nutzbar, weil morgen ein anderes Datum ist
-
@damrak2022 gut dann mach mal noch eine debug Node hinter deine Change NOde und versuche mal das Datum in seine Bestandteile aufzuteilen.
Nein wir nehmen JSONATA und teilen erst mal das Datum in seine Bestandteile auf - wie Du sagst hast Du den Bindestrich in diesem Fall als Trenner.
Dann schau Dir mal die split Funktion in der Change Node in JSONATA an.
Dies ist ja die Ausgangssituation:
-
Wenn Du etwas an dem Hilfetext nicht verstehst - dann frag - sonst warte ich hier eine Ewigkeit.