NEWS
Uhrzeit Sonnenaufgang von openweathermap an Dashboard
-
Hallo Zusammen,
ich habe den Zeitpunkt des Sonnenaufgangs als Number von openweathernet.
1 var newMsg = { payload : msg.payload.sunset };
2 return newMsgDanach wandle ich es in einen String und schneide GMT+0100 (Mitteleuropäische Normalzeit) weg. Dann bleibt das Datum mit Uhrzeit übrig.
1 var time = msg.payload
2 time *= 1000
3 var sunrise = new Date(time)
4 msg.payload = sunrise.toString().replace(" GMT+0100 (Mitteleuropäische Normalzeit)", "");
5 return msg;Ergebnis:
2.1.2022, 20:03:56node: f5dde3798730e67d
msg.payload : string[24]
"Sun Jan 02 2022 08:07:14"Jetzt würde ich gern das Datum und die Uhrzeit getrennt anzeigen lassen. Nur leider weiß ich nicht, wie ich das trennen kann.
Kann mir da jemand helfen?
LG Daniel
-
Hallo zusammen,
habe gestern noch ein wenig gesucht. Mir haben 2 Beiträge geholfen.
https://forum.iobroker.net/topic/50086/datum-und-zeitverarbeitung-mit-nodered/19
und
https://www.w3docs.com/snippets/javascript/how-to-format-a-javascript-date.htmlHabe es jetzt so gelöst:
1. Funktion
1 var newMsg = { payload : msg.payload.sunset };
2 return newMsg2. Funktion
1 var time = msg.payload
2 time *= 1000
3 msg.payload = time;
4 return msg;Danach noch eine change-node mit
$moment(payload).format('HH:mm:ss')Jetzt geht es. Wer noch eine elegantere Möglichkeit hat, darf die gern teilen. Bin gerade erst am Angang,
mich mit Node-Red und Javascript zu beschägftigen.LG Daniel
-
@libsch Hi, ich persönlich bin bei dieser Lösung hängengeblieben. Damit kann ich mir meine Ausgabe je nach wunsch zusammenstellen. In diesem Fall werte ich das msg.payload.ts (timestamp) aus. Da ziehe ich mir die einzelnen Daten des Datums als Variablen raus und füge das zum Schluss so als Text String zusammen wie ich es brauche und gebe es wieder als msg.payload.ts aus. In meinem Fall habe ich noch das hinzufügen einer 0 bei Stunde wenn einstellig ist auskommentiert, weil ich die 0 nicht möchte. Als Ausgabe erhalte ich hier dann z.B. Montag 7 Uhr 44.
Habe mir da noch Kommentare dran geschrieben, damit ich irgendwann mal noch weiß was ich da mache.
Für deinen Fall, mit msg.payload.sunset und Ausgabe als msg.payload nur in Stunden Minuten und Sekunden könnte das dann so aussehen.
Der Code kommt in eine Funktion Node
Quelle ist dieser Post, eventuell auch interessant für Dich, da gabs auch mehrere Lösungsansätze, unter anderem auch deine jetztige Lösung.
https://forum.iobroker.net/topic/40727/timestamp-umwandeln-in-node-red-gelöst/5Edit: Bei deiner Lösung, könntest du die beiden Funktionen auch in eine Funktion packen.
var time = msg.payload.sunset time *= 1000 msg.payload = time; return msg;
Oder du nimmst anstatt der ersten Funtion ne change Node:
Da gibts meist immer viele Wege die zum Erfolg führen und jeder hat da so seine Vorlieben. Ich versuche immer möglichst wenig Funktion Nodes einzusetzen, da man nicht gleich immer von außen sieht was darin passiert und es schnell unübersichtlich wird. Aber in diesem Fall habe ich noch keine andere zufriedenstellende Alternative gefunden. -
-
@libsch Wenn Du ein moment-Objekt erstellst - die Seite hast ja bereits gefunden, kannst Du Dir das Objekt in allen möglichen Formaten ausgeben lassen. In der Regel versteht die moment Bibliothek die RFC Datumstrings direkt als Input bzw. Du kannst ja über einen Formatstring angeben, wie die Eingabe zu interpretieren ist.
Auch wenn der Input zum Beispiel eine UNIX Zeit in s anstelle von ms angegeben ist, kann man das direkt beim Einlesen durch einen Formatstring angeben.
https://momentjs.com/docs/#/parsing/
Ich dachte ich hätte das alles in dem Thread ausführlichst beschrieben, scheint aber wohl nicht so zu sein.
Es ist eigentlich so schade.Man muss also gar nichts rechnen, noch function Nodes noch sonst was zu nutzen.
Ist die Eingabe in ms gebe ich ein kleines x als Format mit, ist die payload in s dann ein großes X. Ausserdem hänge ich gleich das Ausgabeformat an.
Javascript brauchst Du dafür jedenfalls nicht, auch wenn es für später durchaus wichtig ist.
Im Prinzip kannst auch in der Changenode statt payload auch die Eigenschaft angeben.
Damit kannst Dir alle sonstigen Nodes sparen.
Das getrennte Ausgeben von Datum und Uhrzeit erreichst Du indem Du einfach 2 Moment Objekte mit der gleichen Zeit erstellst und nur das Ausgabeformat modifizierst.
-
@frankyboy73 sagte in Uhrzeit Sonnenaufgang von openweathermap an Dashboard:
In meinem Fall habe ich noch das hinzufügen einer 0 bei Stunde wenn einstellig ist auskommentiert, weil ich die 0 nicht möchte. Als Ausgabe erhalte ich hier dann z.B. Montag 7 Uhr 44.
Auch das geht mit der Moment Bibliothek direkt.
$moment().locale('de').format('dddd H [Uhr] mm')