Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Uhrzeit Sonnenaufgang von openweathermap an Dashboard

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Uhrzeit Sonnenaufgang von openweathermap an Dashboard

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      libsch last edited by

      Hallo Zusammen,

      ich habe den Zeitpunkt des Sonnenaufgangs als Number von openweathernet.

      1 var newMsg = { payload : msg.payload.sunset };
      2 return newMsg

      Danach 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

      L mickym 2 Replies Last reply Reply Quote 0
      • L
        libsch @libsch last edited by

        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.html

        Habe es jetzt so gelöst:

        1. Funktion
        1 var newMsg = { payload : msg.payload.sunset };
        2 return newMsg

        2. 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

        F 1 Reply Last reply Reply Quote 0
        • F
          frankyboy73 @libsch last edited by frankyboy73

          @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.

          //Zeit nach Wunsch umwandeln
          
          
          
          var dt = new Date(msg.payload.ts);
          
          //mit var days werden die Wochentage (0-6) auf die Tagesnamen umgewandelt
          var days = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
          var Day = days[dt.getDay()];
          
          var Tag = dt.getDate();
          var Monat = dt.getMonth() + 1;
          var Jahr = dt.getFullYear();
          var Stunde = dt.getHours();
          var Minute = dt.getMinutes();
          var Sekunde = dt.getSeconds();
          
          //hier wird über ob die Zahlen einstellig sind, falls ja dann wird ne Null davor gesetzt
          if(Monat.toString().length == 1) {
          var Monat = '0'+Monat;
          }
          if(Tag.toString().length == 1) {
          var Tag = '0'+Tag;
          }
          //if(Stunde.toString().length == 1) {
          //var Stunde = '0'+Stunde;
          //}
          if(Minute.toString().length == 1) {
          var Minute = '0'+Minute;
          }
          if(Sekunde.toString().length == 1) {
          var Sekunde = '0'+Sekunde;
          }
          //hier die gewünschte Ausgabe zusammenstellen
          msg.payload.ts = Day+' '+Stunde+' Uhr '+Minute;
          return msg;
          

          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.

          //Zeit nach Wunsch umwandeln
          
          
          
          var dt = new Date(msg.payload.sunset);
          
          //mit var days werden die Wochentage (0-6) auf die Tagesnamen umgewandelt
          var days = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
          var Day = days[dt.getDay()];
          
          var Tag = dt.getDate();
          var Monat = dt.getMonth() + 1;
          var Jahr = dt.getFullYear();
          var Stunde = dt.getHours();
          var Minute = dt.getMinutes();
          var Sekunde = dt.getSeconds();
          
          //hier wird über ob die Zahlen einstellig sind, falls ja dann wird ne Null davor gesetzt
          if(Monat.toString().length == 1) {
          var Monat = '0'+Monat;
          }
          if(Tag.toString().length == 1) {
          var Tag = '0'+Tag;
          }
          //if(Stunde.toString().length == 1) {
          //var Stunde = '0'+Stunde;
          //}
          if(Minute.toString().length == 1) {
          var Minute = '0'+Minute;
          }
          if(Sekunde.toString().length == 1) {
          var Sekunde = '0'+Sekunde;
          }
          //hier die gewünschte Ausgabe zusammenstellen
          msg.payload = Stunde+  ' Uhr ' +Minute+ ' und ' +Sekunde+ ' Sekunden';
          return msg;
          


          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/5

          Edit: 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:
          Change1.jpg
          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.

          L mickym 2 Replies Last reply Reply Quote 0
          • L
            libsch @frankyboy73 last edited by

            @frankyboy73

            Danke für die Hilfe.

            LG

            1 Reply Last reply Reply Quote 0
            • mickym
              mickym Most Active @libsch last edited by mickym

              @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/

              4cd2aa34-abbf-421c-9a83-bb513710e41a-image.png

              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.

              d87bbcca-4d63-4c55-8e0e-89baa8d46d48-image.png

              [
                 {
                     "id": "24cd7114.ce5e4e",
                     "type": "inject",
                     "z": "54b226bc.0793e8",
                     "name": "",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "topic",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "",
                     "payloadType": "date",
                     "x": 660,
                     "y": 2880,
                     "wires": [
                         [
                             "bc88a459.8035f8",
                             "efdaf679.2867f8",
                             "2fb2fbe8.db1a54"
                         ]
                     ]
                 },
                 {
                     "id": "efdaf679.2867f8",
                     "type": "change",
                     "z": "54b226bc.0793e8",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "payload/1000",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 870,
                     "y": 2920,
                     "wires": [
                         [
                             "d1b5fc81.a852b",
                             "f68d8bfe.5a1cf8"
                         ]
                     ]
                 },
                 {
                     "id": "bc88a459.8035f8",
                     "type": "debug",
                     "z": "54b226bc.0793e8",
                     "name": "Zeit in ms",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 870,
                     "y": 2820,
                     "wires": []
                 },
                 {
                     "id": "d1b5fc81.a852b",
                     "type": "debug",
                     "z": "54b226bc.0793e8",
                     "name": "Zeit in s",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 860,
                     "y": 3000,
                     "wires": []
                 },
                 {
                     "id": "f68d8bfe.5a1cf8",
                     "type": "change",
                     "z": "54b226bc.0793e8",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "$moment(payload,'X').format('HH:mm:ss')\t",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1150,
                     "y": 2920,
                     "wires": [
                         [
                             "893bba7e.941aa8"
                         ]
                     ]
                 },
                 {
                     "id": "2fb2fbe8.db1a54",
                     "type": "change",
                     "z": "54b226bc.0793e8",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "$moment(payload,'x').format('HH:mm:ss')",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1150,
                     "y": 2880,
                     "wires": [
                         [
                             "893bba7e.941aa8"
                         ]
                     ]
                 },
                 {
                     "id": "893bba7e.941aa8",
                     "type": "debug",
                     "z": "54b226bc.0793e8",
                     "name": "Zeit RFC",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 1420,
                     "y": 2820,
                     "wires": []
                 }
              ]
              

              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.

              e75863d5-bb59-4936-b9ea-860dfea162b8-image.png

              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.

              b6a37682-2d62-4b3e-929f-95812e0fe3b0-image.png

              [
                 {
                     "id": "24cd7114.ce5e4e",
                     "type": "inject",
                     "z": "54b226bc.0793e8",
                     "name": "",
                     "props": [
                         {
                             "p": "payload"
                         },
                         {
                             "p": "topic",
                             "vt": "str"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "",
                     "payloadType": "date",
                     "x": 660,
                     "y": 2920,
                     "wires": [
                         [
                             "efdaf679.2867f8"
                         ]
                     ]
                 },
                 {
                     "id": "efdaf679.2867f8",
                     "type": "change",
                     "z": "54b226bc.0793e8",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "payload/1000",
                             "tot": "jsonata"
                         },
                         {
                             "t": "move",
                             "p": "payload",
                             "pt": "msg",
                             "to": "payload.sunrise",
                             "tot": "msg"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 870,
                     "y": 2920,
                     "wires": [
                         [
                             "d1b5fc81.a852b",
                             "f68d8bfe.5a1cf8",
                             "b02ce0b5.c9c0e"
                         ]
                     ]
                 },
                 {
                     "id": "d1b5fc81.a852b",
                     "type": "debug",
                     "z": "54b226bc.0793e8",
                     "name": "Zeit in s",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 860,
                     "y": 3000,
                     "wires": []
                 },
                 {
                     "id": "f68d8bfe.5a1cf8",
                     "type": "change",
                     "z": "54b226bc.0793e8",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "$moment(payload.sunrise,'X').format('HH:mm:ss')\t",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1130,
                     "y": 2940,
                     "wires": [
                         [
                             "dd9e3919.4a3478"
                         ]
                     ]
                 },
                 {
                     "id": "b02ce0b5.c9c0e",
                     "type": "change",
                     "z": "54b226bc.0793e8",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "$moment(payload.sunrise,'X').format('DD.MM.YY')\t",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 1130,
                     "y": 2900,
                     "wires": [
                         [
                             "dd9e3919.4a3478"
                         ]
                     ]
                 },
                 {
                     "id": "dd9e3919.4a3478",
                     "type": "debug",
                     "z": "54b226bc.0793e8",
                     "name": "",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "false",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 1350,
                     "y": 2920,
                     "wires": []
                 }
              ]
              

              1 Reply Last reply Reply Quote 0
              • mickym
                mickym Most Active @frankyboy73 last edited by

                @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. 😉

                f31ce43d-e5e6-48aa-b4b5-241c2f4b83d3-image.png

                $moment().locale('de').format('dddd H [Uhr] mm')
                
                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                977
                Online

                31.7k
                Users

                79.8k
                Topics

                1.3m
                Posts

                3
                6
                1196
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo