Seite 1 von 2

[V4.0 IP4] Umwandlung einer ISO 8601 Zeit in Unix

Verfasst: Di Okt 03, 2023 8:31 pm
von jensgulow
Hallo,

Hier mal ein Auszug aus dem Response einer Http-API Anfrage beim DWD ....
"EC_GROUP": "WIND",
"EC_AREA_COLOR": "251 140 0",
"EFFECTIVE": "2023-10-02T17:47:00Z",
"ONSET": "2023-10-03T15:00:00Z",
"EXPIRES": "2023-10-03T22:00:00Z",

Die Zeitangaben sind in ISO 8601 Format. Um die Zeitangaben ("ONSET", "EXPIRES") im TWS weiterverwenden zu können suche ich einen Weg diese in die Unixzeit zu wandeln. Habe hier im Forum bisher keinen Ansatz gefunden. Hat sich da ggf. jemand schon einmal was zusammengebaut?

Re: [V4 IP4] Umwandlung einer ISO 8601 Zeit in Unix

Verfasst: Mi Okt 04, 2023 8:10 am
von Robosoc
Zumindest im Logik-Editor würde ich dafür bis jetzt (V4 IP4) noch keine Möglichkeit sehen.
Hast Du Node-Red im Portainer am Laufen?

Re: [V4 IP4] Umwandlung einer ISO 8601 Zeit in Unix

Verfasst: Mi Okt 04, 2023 8:35 am
von jensgulow
@Robosoc Ja , habe ich. Wollte aber wenn möglich irgendwann davon weg kommen. Aktuell laufen da aber noch einige Amazon-Alexa-Bausteine drüber. Also wenn es da eine gute Lösung gäbe, würde mir das sicher auch helfen.

Re: [V4 IP4] Umwandlung einer ISO 8601 Zeit in Unix

Verfasst: Mi Okt 04, 2023 9:29 am
von Robosoc
Ich bin leider auch kein JS-Crack und könnte Dir die Lösung da nicht aus dem Ärmel zaubern...da Du ja aber grundsätzlich "nur" einen String in Teile und diese dann in Zahlen zerlegen musst und aus diesen Zahlen dann durch eine Formeln eine große Zahl "basteln" musst, wird es in NodeRed auf jeden Fall gehen.

Ich bin mir nicht ganz sicher, aber ich glaube auf den ersten Blick, dass Dir die Funktion

Code: Alles auswählen

$toMillis
aus JSONata 2.0.0 die Aufgabe löst:
https://docs.jsonata.org/date-time-functions

Bin mir nicht sicher, ob Du JSONata irgendwie als Palette einbinden kannst, aber ansonsten könntest Du vermutlich hier ein wenig mehr dazu finden:
https://flows.nodered.org/flow/29fd01f8 ... bd68001cb0

Wenn Dich die JSONata Library nicht weiterbringt, dann vielleicht Folgender Link. Dort sind ähnliche Dinge beschrieben, damit würde man vermutlich schon ein wenig anfangen können und sich dann selber die richtige Lösung in Java Script basteln.
https://forum.iobroker.net/topic/40727/ ... el%C3%B6st

Re: [V4 IP4] Umwandlung einer ISO 8601 Zeit in Unix

Verfasst: Mi Okt 04, 2023 9:59 am
von jensgulow
Na ich werde mich mal nach einer Lösung umsehen und berichte dann.
Danke für die Links.

Re: [V4 IP4] Umwandlung einer ISO 8601 Zeit in Unix

Verfasst: Mi Okt 04, 2023 10:56 pm
von gbglace
Ich hatte gestern zufällig ein Video bei YT gesehen da hat der Torben Ledermann mal gezeigt wie er in NodeRed sich Zeiten aus irgendwelchen Müllkalendern für die Anzeige am Glastaster passend umformatiert. Er hat da einen Node gefunden wo man das recht bequem angeben kann, links die Payload mit dem Datum/Zeit in Format X rein und rechts in Format Y wieder raus.

Das hier war es

Re: [V4 IP4] Umwandlung einer ISO 8601 Zeit in Unix

Verfasst: Do Okt 05, 2023 2:51 pm
von Robosoc
Cooler Hinweis Göran, aus dem Video recht am Anfang lernt man, das das Zauberwort der node MOMENT ist.
https://flows.nodered.org/node/node-red-contrib-moment

Beim Mittagstisch hat mich heute ein Kollege noch auf eine andere Idee gebracht. Wir sprachen über Programmieren und Hilfe von ChatGPT im Allgemeinen. Das hat mich auf die Idee gebracht mal auf https://chatgptx.de/folgende Frage zu stellen:
Wie kann ich ein ISO 8601 Datum in NodeRed in eine Unix Zeit wandeln?
Die Antwort hat mich mal wieder ziemlich beeindruckt:
In Node-RED können Sie das moment-Modul verwenden, um ein ISO 8601-Datum in eine Unix-Zeit umzuwandeln. Hier ist ein Beispiel, wie Sie dies tun können:

1. Installieren Sie das moment-Modul, indem Sie den folgenden Befehl in Ihrem Node-RED-Projektverzeichnis ausführen:

Code: Alles auswählen

npm install moment
2. Fügen Sie einen function-Knoten zu Ihrem Flow hinzu und konfigurieren Sie ihn wie folgt:

Code: Alles auswählen

// Importieren des moment-Moduls
var moment = global.get('moment');

// Eingabe des ISO 8601-Datums
var isoDate = msg.payload;

// Umwandlung in Unix-Zeit
var unixTime = moment(isoDate).unix();

// Ausgabe der Unix-Zeit
msg.payload = unixTime;
return msg;
3. Verbinden Sie den function-Knoten mit dem Eingangsknoten, von dem das ISO 8601-Datum stammt, und dem Ausgangsknoten, an den die Unix-Zeit gesendet werden soll.

4. Speichern und bereiten Sie Ihren Flow vor.

Jetzt wird das ISO 8601-Datum, das an den Eingangsknoten gesendet wird, in eine Unix-Zeit umgewandelt und an den Ausgangsknoten gesendet.

Re: [V4 IP4] Umwandlung einer ISO 8601 Zeit in Unix

Verfasst: Do Okt 05, 2023 3:09 pm
von KFloo
Vielleicht stehe ich gerade auf dem Schlauch und habe auch leider gerade wenig Zeit, aber ich wundere mich, warum niemand die printf u. concat-Modulbausteine und Custom-Logik erwähnt hat (ab V4 IP?). Funktioniert das nicht?

(Ich habe damit mal einen einfachen Dez->Hex-Rechner gebaut.)

Edit: Überlesen, dass das Ziel die Unixzeit ist, evtl. braucht es dann noch CalcFormula?

Re: [V4 IP4] Umwandlung einer ISO 8601 Zeit in Unix

Verfasst: Do Okt 05, 2023 3:29 pm
von jensgulow
@Robosoc Ja, die Sache mit moments werde ich ausprobieren ....

Frage nebenher: Kann man in node red sichtbar machen, welche "Rechenschritte" der node so macht um das gezeigte Ergebnis zu erhalten? Kann man ja sicher draus lernen ....

@KFloo Vielleicht geht das, aber dazu steh ich mit dem Logikeditor bei solch komplexer Fragestellung etwas auf dem Schlauch...

Re: [V4 IP4] Umwandlung einer ISO 8601 Zeit in Unix

Verfasst: Do Okt 05, 2023 3:40 pm
von KFloo
Hallo @jensgulow ,
habs nicht kritisch gemeint. :) Ich denke, ich habe mich auch vertan, ich hab irgendwie gedacht, ich könnte den String zerlegen. Sorry, an alle für die Verwirrung.