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. [gelöst] JSONata loop - $moment > Invalid date?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] JSONata loop - $moment > Invalid date?

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

      Hallo zusammen,

      ich komme gerade nicht mehr weiter und verstehe auch nicht wo der Fehler liegt.

      In der markierten Zeile wird korrekt zum 03.01.2025 mittels add(1,'days') ein Tag als Test addiert. Soweit so gut.
      flow_Schulferien_2.jpg
      In der markierten loop wird das Datum als "Invalid date" ausgegeben.
      flow_Schulferien_3.jpg
      Debug:
      flow_Schulferien_1.jpg

      Mein Flow:

      [
         {
             "id": "aaf1926df51b3128",
             "type": "debug",
             "z": "2a5d5250.f178be",
             "g": "c99b6d419a34f213",
             "name": "Info",
             "active": true,
             "tosidebar": true,
             "console": false,
             "tostatus": true,
             "complete": "payload",
             "targetType": "msg",
             "statusVal": "payload",
             "statusType": "auto",
             "x": 1950,
             "y": 2500,
             "wires": []
         },
         {
             "id": "b71b2f4e4c163357",
             "type": "change",
             "z": "2a5d5250.f178be",
             "g": "c99b6d419a34f213",
             "name": "Schulferien",
             "rules": [
                 {
                     "t": "delete",
                     "p": "headers",
                     "pt": "msg"
                 },
                 {
                     "t": "delete",
                     "p": "statusCode",
                     "pt": "msg"
                 },
                 {
                     "t": "delete",
                     "p": "url",
                     "pt": "msg"
                 },
                 {
                     "t": "delete",
                     "p": "responseUrl",
                     "pt": "msg"
                 },
                 {
                     "t": "delete",
                     "p": "retry",
                     "pt": "msg"
                 },
                 {
                     "t": "delete",
                     "p": "redirectList",
                     "pt": "msg"
                 },
                 {
                     "t": "set",
                     "p": "payload",
                     "pt": "msg",
                     "to": "[\t   {\t       \"Ferien\":\"Weihnachtsferien\",\t        \"start\": $moment(payload[0].startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),\t        \"end\": $moment(payload[0].endDate,'YYYY-MM-DD').add(1,'days').format('DD.MM.YYYY'),\t        \"payload\": (\t            $start := $moment($moment(payload[0].startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t            $end := $moment($moment(payload[0].endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t            $diff := $end.diff($start, 'days'); \t            [1..$diff].{\t            \"day\": $,\t            \"date\": $moment(payload[0].startDate,'YYYY-MM-DD').add($,'days').format('DD.MM.YYYY')\t        }    \t        )    \t   }\t]",
                     "tot": "jsonata"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 1930,
             "y": 2460,
             "wires": [
                 [
                     "aaf1926df51b3128"
                 ]
             ]
         },
         {
             "id": "68c7a189d51bf7bf",
             "type": "http request",
             "z": "2a5d5250.f178be",
             "g": "c99b6d419a34f213",
             "name": "",
             "method": "GET",
             "ret": "obj",
             "paytoqs": "body",
             "url": "",
             "tls": "",
             "persist": false,
             "proxy": "",
             "insecureHTTPParser": false,
             "authType": "",
             "senderr": false,
             "headers": [],
             "x": 1950,
             "y": 2420,
             "wires": [
                 [
                     "b71b2f4e4c163357"
                 ]
             ]
         },
         {
             "id": "299b868a61569eb1",
             "type": "change",
             "z": "2a5d5250.f178be",
             "g": "c99b6d419a34f213",
             "name": "",
             "rules": [
                 {
                     "t": "set",
                     "p": "url",
                     "pt": "msg",
                     "to": "payload",
                     "tot": "msg"
                 },
                 {
                     "t": "set",
                     "p": "url",
                     "pt": "msg",
                     "to": "$.url",
                     "tot": "jsonata"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 1930,
             "y": 2380,
             "wires": [
                 [
                     "68c7a189d51bf7bf"
                 ]
             ]
         },
         {
             "id": "430861125722076d",
             "type": "function",
             "z": "2a5d5250.f178be",
             "g": "c99b6d419a34f213",
             "name": "Url",
             "func": "msg.payload = `https://openholidaysapi.org/SchoolHolidays?countryIsoCode=DE&validFrom=${msg.payload}-01-01&validTo=${msg.payload}-12-31&languageIsoCode=DE&subdivisionCode=DE-BY`;\nreturn msg;\n\n",
             "outputs": 1,
             "timeout": "",
             "noerr": 0,
             "initialize": "",
             "finalize": "",
             "libs": [],
             "x": 1750,
             "y": 2380,
             "wires": [
                 [
                     "299b868a61569eb1"
                 ]
             ]
         },
         {
             "id": "71181a8bd5e21a21",
             "type": "change",
             "z": "2a5d5250.f178be",
             "g": "c99b6d419a34f213",
             "name": "Jahr",
             "rules": [
                 {
                     "t": "set",
                     "p": "topic",
                     "pt": "msg",
                     "to": "Jahr",
                     "tot": "str"
                 },
                 {
                     "t": "set",
                     "p": "payload",
                     "pt": "msg",
                     "to": "$moment().year() ",
                     "tot": "jsonata"
                 },
                 {
                     "t": "set",
                     "p": "payload",
                     "pt": "msg",
                     "to": "$string(payload)",
                     "tot": "jsonata"
                 }
             ],
             "action": "",
             "property": "",
             "from": "",
             "to": "",
             "reg": false,
             "x": 1750,
             "y": 2420,
             "wires": [
                 [
                     "430861125722076d"
                 ]
             ]
         },
         {
             "id": "2ccf942347bcc03b",
             "type": "inject",
             "z": "2a5d5250.f178be",
             "g": "c99b6d419a34f213",
             "name": "Abfrage",
             "props": [
                 {
                     "p": "payload"
                 }
             ],
             "repeat": "",
             "crontab": "05 00 * * *",
             "once": true,
             "onceDelay": "0.5",
             "topic": "",
             "payload": "",
             "payloadType": "date",
             "x": 1540,
             "y": 2380,
             "wires": [
                 [
                     "71181a8bd5e21a21"
                 ]
             ]
         }
      ]
      

      Hintergrund des Flows ist, dass ich im Anschluss jedes Datum auf Übereinstimmung zum aktuellen Tag überprüfen möchte.
      So habe ich es bei den Feiertagen bereits umgesetzt.

         {
             "Feiertag":"Neujahr",
             "payload": (
                 $date := $moment($moment(payload[0].startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                 $today := $moment($moment().format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                 $date.isSame($today)
                 )
             }
      

      Danke für eure Unterstützung.

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

        Du musst etwas aufpassen mit Deinen Referenzen. $ ändert sich ja - je nach Kontext. Also musst du wenn Du weiter unten auf die payload verweist auf das Root-Nachrichtenobjekt verweisen und auch innerhalb der Schleife hast Du $ ja bereits verwendet - deswegen würde ich den Kontext fix einer Variablen zuweisen. Zumindest scheint es damit zu funktionieren:

        [
           {
               "Ferien":"Weihnachtsferien",
                "start": $moment(payload[0].startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),
                "end": $moment(payload[0].endDate,'YYYY-MM-DD').add(1,'days').format('DD.MM.YYYY'),
                "payload": (
                    $start := $moment($moment(payload[0].startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                    $end := $moment($moment(payload[0].endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                    $diff := $end.diff($start, 'days'); 
                    ([1..$diff])@$d.{
                    "day": $d,
                    "date": $moment($$.payload[0].startDate,'YYYY-MM-DD').add($d,'days').format('DD.MM.YYYY')
                }    
                )    
           }
        ]
        

        16b28367-4c96-41ed-8754-a129d5c29ae2-image.png

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

          Wenn Du alle Ferien aufeinmal haben willst geht es so:
          Hier der Import:

          [
             {
                 "id": "22257f083b3c6545",
                 "type": "inject",
                 "z": "7faa06d941e86452",
                 "name": "",
                 "props": [
                     {
                         "p": "payload"
                     }
                 ],
                 "repeat": "",
                 "crontab": "",
                 "once": false,
                 "onceDelay": 0.1,
                 "topic": "",
                 "payload": "[{\"id\":\"f3b90493-d141-4aab-ac30-37084db988c3\",\"startDate\":\"2024-12-23\",\"endDate\":\"2025-01-03\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Weihnachtsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"5257b2de-813a-406f-9b8e-cd56586050f2\",\"startDate\":\"2025-03-03\",\"endDate\":\"2025-03-07\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Frühjahrsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"03cc22f2-1730-4ea4-b2dc-90d8d0f41e62\",\"startDate\":\"2025-04-14\",\"endDate\":\"2025-04-25\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Osterferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"dcda193e-7508-48e5-9da7-670a36cb3b0c\",\"startDate\":\"2025-06-10\",\"endDate\":\"2025-06-20\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Pfingstferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"bc2bd00a-e716-46c3-8a27-2538c777d9bd\",\"startDate\":\"2025-08-01\",\"endDate\":\"2025-09-15\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Sommerferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"867bf086-bdaa-4642-8fcf-4fd07f45ac08\",\"startDate\":\"2025-11-03\",\"endDate\":\"2025-11-07\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Herbstferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"cb244bdc-ddc5-48b0-a6a4-675b57facc0e\",\"startDate\":\"2025-11-19\",\"endDate\":\"2025-11-19\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Buß- und Bettag\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"fae75443-4eb3-4720-9ba2-3dcca3553820\",\"startDate\":\"2025-12-22\",\"endDate\":\"2026-01-05\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Weihnachtsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]}]",
                 "payloadType": "json",
                 "x": 210,
                 "y": 440,
                 "wires": [
                     [
                         "dc9cbd5dcf271080",
                         "6932187427371fb5",
                         "8e380e141450fd22"
                     ]
                 ]
             },
             {
                 "id": "2ad8f5ad99f794c2",
                 "type": "debug",
                 "z": "7faa06d941e86452",
                 "name": "Info",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": true,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "payload",
                 "statusType": "auto",
                 "x": 610,
                 "y": 440,
                 "wires": []
             },
             {
                 "id": "8e380e141450fd22",
                 "type": "change",
                 "z": "7faa06d941e86452",
                 "name": "Schulferien 2",
                 "rules": [
                     {
                         "t": "set",
                         "p": "payload",
                         "pt": "msg",
                         "to": "payload.\t   {\t   \"Ferien\": $.name[language=\"DE\"].text,\t   \"start\": $moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),\t   \"end\": $moment($.endDate,'YYYY-MM-DD').add(1,'days').format('DD.MM.YYYY'),\t   \"payload\": (\t       $start := $moment($moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t       $end := $moment($moment($.endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t       $diff := $end.diff($start, 'days');\t       ([1..$diff])@$d.{\t            \"day\": $d,\t            \"date\": $moment($.startDate,'YYYY-MM-DD').add($d,'days').format('DD.MM.YYYY')\t        }    \t       )\t   }\t",
                         "tot": "jsonata"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 430,
                 "y": 440,
                 "wires": [
                     [
                         "2ad8f5ad99f794c2"
                     ]
                 ]
             }
          ]
          

          payload.
             {
             "Ferien": $.name[language="DE"].text,
             "start": $moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),
             "end": $moment($.endDate,'YYYY-MM-DD').add(1,'days').format('DD.MM.YYYY'),
             "payload": (
                 $start := $moment($moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                 $end := $moment($moment($.endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                 $diff := $end.diff($start, 'days');
                 ([1..$diff])@$d.{
                      "day": $d,
                      "date": $moment($.startDate,'YYYY-MM-DD').add($d,'days').format('DD.MM.YYYY')
                  }    
                 )
             }
          

          Das erzeugt dann diese Ausgabe:

          [
            {
              "Ferien": "Weihnachtsferien",
              "start": "23.12.2024",
              "end": "04.01.2025",
              "payload": [
                {
                  "day": 1,
                  "date": "24.12.2024"
                },
                {
                  "day": 2,
                  "date": "25.12.2024"
                },
                {
                  "day": 3,
                  "date": "26.12.2024"
                },
                {
                  "day": 4,
                  "date": "27.12.2024"
                },
                {
                  "day": 5,
                  "date": "28.12.2024"
                },
                {
                  "day": 6,
                  "date": "29.12.2024"
                },
                {
                  "day": 7,
                  "date": "30.12.2024"
                },
                {
                  "day": 8,
                  "date": "31.12.2024"
                },
                {
                  "day": 9,
                  "date": "01.01.2025"
                },
                {
                  "day": 10,
                  "date": "02.01.2025"
                },
                {
                  "day": 11,
                  "date": "03.01.2025"
                }
              ]
            },
            {
              "Ferien": "Frühjahrsferien",
              "start": "03.03.2025",
              "end": "08.03.2025",
              "payload": [
                {
                  "day": 1,
                  "date": "04.03.2025"
                },
                {
                  "day": 2,
                  "date": "05.03.2025"
                },
                {
                  "day": 3,
                  "date": "06.03.2025"
                },
                {
                  "day": 4,
                  "date": "07.03.2025"
                }
              ]
            },
            {
              "Ferien": "Osterferien",
              "start": "14.04.2025",
              "end": "26.04.2025",
              "payload": [
                {
                  "day": 1,
                  "date": "15.04.2025"
                },
                {
                  "day": 2,
                  "date": "16.04.2025"
                },
                {
                  "day": 3,
                  "date": "17.04.2025"
                },
                {
                  "day": 4,
                  "date": "18.04.2025"
                },
                {
                  "day": 5,
                  "date": "19.04.2025"
                },
                {
                  "day": 6,
                  "date": "20.04.2025"
                },
                {
                  "day": 7,
                  "date": "21.04.2025"
                },
                {
                  "day": 8,
                  "date": "22.04.2025"
                },
                {
                  "day": 9,
                  "date": "23.04.2025"
                },
                {
                  "day": 10,
                  "date": "24.04.2025"
                },
                {
                  "day": 11,
                  "date": "25.04.2025"
                }
              ]
            },
            {
              "Ferien": "Pfingstferien",
              "start": "10.06.2025",
              "end": "21.06.2025",
              "payload": [
                {
                  "day": 1,
                  "date": "11.06.2025"
                },
                {
                  "day": 2,
                  "date": "12.06.2025"
                },
                {
                  "day": 3,
                  "date": "13.06.2025"
                },
                {
                  "day": 4,
                  "date": "14.06.2025"
                },
                {
                  "day": 5,
                  "date": "15.06.2025"
                },
                {
                  "day": 6,
                  "date": "16.06.2025"
                },
                {
                  "day": 7,
                  "date": "17.06.2025"
                },
                {
                  "day": 8,
                  "date": "18.06.2025"
                },
                {
                  "day": 9,
                  "date": "19.06.2025"
                },
                {
                  "day": 10,
                  "date": "20.06.2025"
                }
              ]
            },
            {
              "Ferien": "Sommerferien",
              "start": "01.08.2025",
              "end": "16.09.2025",
              "payload": [
                {
                  "day": 1,
                  "date": "02.08.2025"
                },
                {
                  "day": 2,
                  "date": "03.08.2025"
                },
                {
                  "day": 3,
                  "date": "04.08.2025"
                },
                {
                  "day": 4,
                  "date": "05.08.2025"
                },
                {
                  "day": 5,
                  "date": "06.08.2025"
                },
                {
                  "day": 6,
                  "date": "07.08.2025"
                },
                {
                  "day": 7,
                  "date": "08.08.2025"
                },
                {
                  "day": 8,
                  "date": "09.08.2025"
                },
                {
                  "day": 9,
                  "date": "10.08.2025"
                },
                {
                  "day": 10,
                  "date": "11.08.2025"
                },
                {
                  "day": 11,
                  "date": "12.08.2025"
                },
                {
                  "day": 12,
                  "date": "13.08.2025"
                },
                {
                  "day": 13,
                  "date": "14.08.2025"
                },
                {
                  "day": 14,
                  "date": "15.08.2025"
                },
                {
                  "day": 15,
                  "date": "16.08.2025"
                },
                {
                  "day": 16,
                  "date": "17.08.2025"
                },
                {
                  "day": 17,
                  "date": "18.08.2025"
                },
                {
                  "day": 18,
                  "date": "19.08.2025"
                },
                {
                  "day": 19,
                  "date": "20.08.2025"
                },
                {
                  "day": 20,
                  "date": "21.08.2025"
                },
                {
                  "day": 21,
                  "date": "22.08.2025"
                },
                {
                  "day": 22,
                  "date": "23.08.2025"
                },
                {
                  "day": 23,
                  "date": "24.08.2025"
                },
                {
                  "day": 24,
                  "date": "25.08.2025"
                },
                {
                  "day": 25,
                  "date": "26.08.2025"
                },
                {
                  "day": 26,
                  "date": "27.08.2025"
                },
                {
                  "day": 27,
                  "date": "28.08.2025"
                },
                {
                  "day": 28,
                  "date": "29.08.2025"
                },
                {
                  "day": 29,
                  "date": "30.08.2025"
                },
                {
                  "day": 30,
                  "date": "31.08.2025"
                },
                {
                  "day": 31,
                  "date": "01.09.2025"
                },
                {
                  "day": 32,
                  "date": "02.09.2025"
                },
                {
                  "day": 33,
                  "date": "03.09.2025"
                },
                {
                  "day": 34,
                  "date": "04.09.2025"
                },
                {
                  "day": 35,
                  "date": "05.09.2025"
                },
                {
                  "day": 36,
                  "date": "06.09.2025"
                },
                {
                  "day": 37,
                  "date": "07.09.2025"
                },
                {
                  "day": 38,
                  "date": "08.09.2025"
                },
                {
                  "day": 39,
                  "date": "09.09.2025"
                },
                {
                  "day": 40,
                  "date": "10.09.2025"
                },
                {
                  "day": 41,
                  "date": "11.09.2025"
                },
                {
                  "day": 42,
                  "date": "12.09.2025"
                },
                {
                  "day": 43,
                  "date": "13.09.2025"
                },
                {
                  "day": 44,
                  "date": "14.09.2025"
                },
                {
                  "day": 45,
                  "date": "15.09.2025"
                }
              ]
            },
            {
              "Ferien": "Herbstferien",
              "start": "03.11.2025",
              "end": "08.11.2025",
              "payload": [
                {
                  "day": 1,
                  "date": "04.11.2025"
                },
                {
                  "day": 2,
                  "date": "05.11.2025"
                },
                {
                  "day": 3,
                  "date": "06.11.2025"
                },
                {
                  "day": 4,
                  "date": "07.11.2025"
                }
              ]
            },
            {
              "Ferien": "Buß- und Bettag",
              "start": "19.11.2025",
              "end": "20.11.2025"
            },
            {
              "Ferien": "Weihnachtsferien",
              "start": "22.12.2025",
              "end": "06.01.2026",
              "payload": [
                {
                  "day": 1,
                  "date": "23.12.2025"
                },
                {
                  "day": 2,
                  "date": "24.12.2025"
                },
                {
                  "day": 3,
                  "date": "25.12.2025"
                },
                {
                  "day": 4,
                  "date": "26.12.2025"
                },
                {
                  "day": 5,
                  "date": "27.12.2025"
                },
                {
                  "day": 6,
                  "date": "28.12.2025"
                },
                {
                  "day": 7,
                  "date": "29.12.2025"
                },
                {
                  "day": 8,
                  "date": "30.12.2025"
                },
                {
                  "day": 9,
                  "date": "31.12.2025"
                },
                {
                  "day": 10,
                  "date": "01.01.2026"
                },
                {
                  "day": 11,
                  "date": "02.01.2026"
                },
                {
                  "day": 12,
                  "date": "03.01.2026"
                },
                {
                  "day": 13,
                  "date": "04.01.2026"
                },
                {
                  "day": 14,
                  "date": "05.01.2026"
                }
              ]
            }
          ]
          
          1 Reply Last reply Reply Quote 0
          • M
            MaGe @mickym last edited by

            @mickym said in JSONata loop - $moment > Invalid date?:

            Vielen lieben Dank. So funktioniert es. 🙂

            [
               {
                   "Ferien":"Weihnachtsferien",
                    "start": $moment(payload[0].startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),
                    "end": $moment(payload[0].endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),
                    "payload": (
                        $start := $moment($moment(payload[0].startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                        $end := $moment($moment(payload[0].endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                        $today := $moment($moment().format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                        $diff := $end.diff($start, 'days');
                        ([1..$diff])@$day.{
                        "date": $moment($$.payload[0].startDate,'YYYY-MM-DD').add($day,'days').format('DD.MM.YYYY'),
                    }    
                    )    
               }
            ]
            

            Wie könnte man den Vergleich durchführen? Ich bekomme folgende Meldung "Ungültiger JSONata Ausdruck: Attempted to invoke a non-function"

            "isSame": $($$.payload[$day].payload[$day].date).isSame($$today)
            

            Wäre es vielleicht auch möglich ohne payload[0].payload[0].date? Daran bin ich bis jetzt noch gescheitert. Dann wäre es vielleicht einfacher mit dem Vergleichen.

            $date := { ([0..$diff])@$day.{
                        $moment($$.payload[0].startDate,'YYYY-MM-DD').add($day,'days').format('DD.MM.YYYY');
            			} 
            			};
            
            mickym 1 Reply Last reply Reply Quote 0
            • mickym
              mickym Most Active @MaGe last edited by mickym

              @mage

              Wäre es vielleicht auch möglich ohne payload[0].payload[0].date? Daran bin ich bis jetzt noch gescheitert. Dann wäre es vielleicht einfacher mit dem Vergleichen.

              Ich habe dir doch gerade unten gepostet, wie Du alle Ferien aufeinmal ausgibst

              Mit der Abfrage habe ich nun festgestellt, dass es anscheinend nicht geht, wenn man den selbst berechneten Wert als 2. Paramter übergibt.

              Ich habs nun aber für alle gemacht und mal schnell die Weihnachtsferien - für eine Woche verlängert, um heute in die Weihnachtsferien zu bekommen.

              9172ed57-b9df-4a93-a4da-3433034a1216-image.png

              Diese permanenten Formatwechsel sind eher kontraproduktiv.

              Hier mal der Import:

              [
                 {
                     "id": "22257f083b3c6545",
                     "type": "inject",
                     "z": "7faa06d941e86452",
                     "name": "",
                     "props": [
                         {
                             "p": "payload"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "[{\"id\":\"f3b90493-d141-4aab-ac30-37084db988c3\",\"startDate\":\"2024-12-23\",\"endDate\":\"2025-01-10\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Weihnachtsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"5257b2de-813a-406f-9b8e-cd56586050f2\",\"startDate\":\"2025-03-03\",\"endDate\":\"2025-03-07\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Frühjahrsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"03cc22f2-1730-4ea4-b2dc-90d8d0f41e62\",\"startDate\":\"2025-04-14\",\"endDate\":\"2025-04-25\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Osterferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"dcda193e-7508-48e5-9da7-670a36cb3b0c\",\"startDate\":\"2025-06-10\",\"endDate\":\"2025-06-20\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Pfingstferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"bc2bd00a-e716-46c3-8a27-2538c777d9bd\",\"startDate\":\"2025-08-01\",\"endDate\":\"2025-09-15\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Sommerferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"867bf086-bdaa-4642-8fcf-4fd07f45ac08\",\"startDate\":\"2025-11-03\",\"endDate\":\"2025-11-07\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Herbstferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"cb244bdc-ddc5-48b0-a6a4-675b57facc0e\",\"startDate\":\"2025-11-19\",\"endDate\":\"2025-11-19\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Buß- und Bettag\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"fae75443-4eb3-4720-9ba2-3dcca3553820\",\"startDate\":\"2025-12-22\",\"endDate\":\"2026-01-05\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Weihnachtsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]}]",
                     "payloadType": "json",
                     "x": 210,
                     "y": 440,
                     "wires": [
                         [
                             "6932187427371fb5",
                             "8e380e141450fd22"
                         ]
                     ]
                 },
                 {
                     "id": "6932187427371fb5",
                     "type": "debug",
                     "z": "7faa06d941e86452",
                     "name": "Test",
                     "active": false,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 430,
                     "y": 380,
                     "wires": []
                 },
                 {
                     "id": "2ad8f5ad99f794c2",
                     "type": "debug",
                     "z": "7faa06d941e86452",
                     "name": "Info",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": true,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "payload",
                     "statusType": "auto",
                     "x": 610,
                     "y": 440,
                     "wires": []
                 },
                 {
                     "id": "8e380e141450fd22",
                     "type": "change",
                     "z": "7faa06d941e86452",
                     "name": "Schulferien 2",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "payload.\t   {\t   \"Ferien\": $.name[language=\"DE\"].text,\t   \"start\": $moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),\t   \"end\": $moment($.endDate,'YYYY-MM-DD').add(1,'days').format('DD.MM.YYYY'),\t   \"payload\": (\t       $start := $moment($moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t       $end := $moment($moment($.endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t       $diff := $end.diff($start, 'days');\t       ([1..$diff])@$d.\t       {\t            \t            \"day\": $d,\t            \"date\": $moment($.startDate,'YYYY-MM-DD').add($d,'days').format('DD.MM.YYYY'),\t            \"isSame\": $moment($.startDate,'YYYY-MM-DD').add($d,'days').isSame($moment(),'day')\t        }    \t       )\t   }\t",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 430,
                     "y": 440,
                     "wires": [
                         [
                             "2ad8f5ad99f794c2"
                         ]
                     ]
                 }
              ]
              

              So schaut der Code momentan aus:

              payload.
                 {
                 "Ferien": $.name[language="DE"].text,
                 "start": $moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),
                 "end": $moment($.endDate,'YYYY-MM-DD').add(1,'days').format('DD.MM.YYYY'),
                 "payload": (
                     $start := $moment($moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                     $end := $moment($moment($.endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                     $diff := $end.diff($start, 'days');
                     ([1..$diff])@$d.
                     {
                          
                          "day": $d,
                          "date": $moment($.startDate,'YYYY-MM-DD').add($d,'days').format('DD.MM.YYYY'),
                          "isSame": $moment($.startDate,'YYYY-MM-DD').add($d,'days').isSame($moment(),'day')
                      }    
                     )
                 }
              
              

              Was ich festgestellt habe - ist vielleicht ein Bug in der Bibliothek.

              das geht:

              "isSame": $moment($.startDate,'YYYY-MM-DD').add($d,'days').isSame($moment(),'day')
              

              umgekehrt geht nicht (warum kann ich Dir nicht sagen):

              "isSame": $moment().isSame(($moment($.startDate,'YYYY-MM-DD').add($d,'days')),'day')
              

              c3453421-7f89-4ba8-bbcc-036ffb32d84f-image.png

              Hier beides nochmal zum Import:

              [
                 {
                     "id": "22257f083b3c6545",
                     "type": "inject",
                     "z": "7faa06d941e86452",
                     "name": "In Ferien",
                     "props": [
                         {
                             "p": "payload"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "[{\"id\":\"f3b90493-d141-4aab-ac30-37084db988c3\",\"startDate\":\"2024-12-23\",\"endDate\":\"2025-01-10\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Weihnachtsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"5257b2de-813a-406f-9b8e-cd56586050f2\",\"startDate\":\"2025-03-03\",\"endDate\":\"2025-03-07\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Frühjahrsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"03cc22f2-1730-4ea4-b2dc-90d8d0f41e62\",\"startDate\":\"2025-04-14\",\"endDate\":\"2025-04-25\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Osterferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"dcda193e-7508-48e5-9da7-670a36cb3b0c\",\"startDate\":\"2025-06-10\",\"endDate\":\"2025-06-20\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Pfingstferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"bc2bd00a-e716-46c3-8a27-2538c777d9bd\",\"startDate\":\"2025-08-01\",\"endDate\":\"2025-09-15\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Sommerferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"867bf086-bdaa-4642-8fcf-4fd07f45ac08\",\"startDate\":\"2025-11-03\",\"endDate\":\"2025-11-07\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Herbstferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"cb244bdc-ddc5-48b0-a6a4-675b57facc0e\",\"startDate\":\"2025-11-19\",\"endDate\":\"2025-11-19\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Buß- und Bettag\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"fae75443-4eb3-4720-9ba2-3dcca3553820\",\"startDate\":\"2025-12-22\",\"endDate\":\"2026-01-05\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Weihnachtsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]}]",
                     "payloadType": "json",
                     "x": 200,
                     "y": 400,
                     "wires": [
                         [
                             "606c813074aba4c8"
                         ]
                     ]
                 },
                 {
                     "id": "6932187427371fb5",
                     "type": "debug",
                     "z": "7faa06d941e86452",
                     "name": "Test",
                     "active": false,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 370,
                     "y": 400,
                     "wires": []
                 },
                 {
                     "id": "2ad8f5ad99f794c2",
                     "type": "debug",
                     "z": "7faa06d941e86452",
                     "name": "Info - funktioniert nicht",
                     "active": false,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": true,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "payload",
                     "statusType": "auto",
                     "x": 760,
                     "y": 480,
                     "wires": []
                 },
                 {
                     "id": "8e380e141450fd22",
                     "type": "change",
                     "z": "7faa06d941e86452",
                     "name": "Schulferien (isSame funktioniert nicht)",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "payload.\t   {\t   \"Ferien\": $.name[language=\"DE\"].text,\t   \"start\": $moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),\t   \"end\": $moment($.endDate,'YYYY-MM-DD').add(1,'days').format('DD.MM.YYYY'),\t   \"payload\": (\t       $start := $moment($moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t       $end := $moment($moment($.endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t       $diff := $end.diff($start, 'days');\t       ([1..$diff])@$d.\t       {\t            \t            \"day\": $d,\t            \"date\": $moment($.startDate,'YYYY-MM-DD').add($d,'days').format('DD.MM.YYYY'),\t            \"isSame\": $moment().isSame(($moment($.startDate,'YYYY-MM-DD').add($d,'days')),'day')\t        }    \t       )\t   }\t",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 470,
                     "y": 480,
                     "wires": [
                         [
                             "2ad8f5ad99f794c2"
                         ]
                     ]
                 },
                 {
                     "id": "373fa37357dc47dc",
                     "type": "change",
                     "z": "7faa06d941e86452",
                     "name": "Schulferien (isSame funktioniert)",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "payload.\t   {\t   \"Ferien\": $.name[language=\"DE\"].text,\t   \"start\": $moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),\t   \"end\": $moment($.endDate,'YYYY-MM-DD').add(1,'days').format('DD.MM.YYYY'),\t   \"payload\": (\t       $start := $moment($moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t       $end := $moment($moment($.endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t       $diff := $end.diff($start, 'days');\t       ([1..$diff])@$d.\t       {\t            \t            \"day\": $d,\t            \"date\": $moment($.startDate,'YYYY-MM-DD').add($d,'days').format('DD.MM.YYYY'),\t            \"isSame\": $moment($.startDate,'YYYY-MM-DD').add($d,'days').isSame($moment(),'day')\t        }    \t       )\t   }\t",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 450,
                     "y": 440,
                     "wires": [
                         [
                             "f4d765c83055a46c",
                             "789380a2a83d7939"
                         ]
                     ]
                 },
                 {
                     "id": "f4d765c83055a46c",
                     "type": "debug",
                     "z": "7faa06d941e86452",
                     "name": "Info - funktioniert",
                     "active": false,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": true,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "payload",
                     "statusType": "auto",
                     "x": 710,
                     "y": 440,
                     "wires": []
                 },
                 {
                     "id": "789380a2a83d7939",
                     "type": "change",
                     "z": "7faa06d941e86452",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "payload.payload[isSame] ? payload.payload[isSame].%.Ferien : \"keine Ferien\"",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 730,
                     "y": 380,
                     "wires": [
                         [
                             "52160933119290b0"
                         ]
                     ]
                 },
                 {
                     "id": "52160933119290b0",
                     "type": "debug",
                     "z": "7faa06d941e86452",
                     "name": "Ferien ?",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 940,
                     "y": 380,
                     "wires": []
                 },
                 {
                     "id": "7f567627a39fae75",
                     "type": "inject",
                     "z": "7faa06d941e86452",
                     "name": "Nicht in Ferien",
                     "props": [
                         {
                             "p": "payload"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "[{\"id\":\"f3b90493-d141-4aab-ac30-37084db988c3\",\"startDate\":\"2024-12-23\",\"endDate\":\"2025-01-03\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Weihnachtsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"5257b2de-813a-406f-9b8e-cd56586050f2\",\"startDate\":\"2025-03-03\",\"endDate\":\"2025-03-07\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Frühjahrsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"03cc22f2-1730-4ea4-b2dc-90d8d0f41e62\",\"startDate\":\"2025-04-14\",\"endDate\":\"2025-04-25\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Osterferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"dcda193e-7508-48e5-9da7-670a36cb3b0c\",\"startDate\":\"2025-06-10\",\"endDate\":\"2025-06-20\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Pfingstferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"bc2bd00a-e716-46c3-8a27-2538c777d9bd\",\"startDate\":\"2025-08-01\",\"endDate\":\"2025-09-15\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Sommerferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"867bf086-bdaa-4642-8fcf-4fd07f45ac08\",\"startDate\":\"2025-11-03\",\"endDate\":\"2025-11-07\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Herbstferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"cb244bdc-ddc5-48b0-a6a4-675b57facc0e\",\"startDate\":\"2025-11-19\",\"endDate\":\"2025-11-19\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Buß- und Bettag\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]},{\"id\":\"fae75443-4eb3-4720-9ba2-3dcca3553820\",\"startDate\":\"2025-12-22\",\"endDate\":\"2026-01-05\",\"type\":\"School\",\"name\":[{\"language\":\"DE\",\"text\":\"Weihnachtsferien\"}],\"regionalScope\":\"Regional\",\"temporalScope\":\"FullDay\",\"nationwide\":false,\"subdivisions\":[{\"code\":\"DE-BY\",\"shortName\":\"BY\"}]}]",
                     "payloadType": "json",
                     "x": 190,
                     "y": 480,
                     "wires": [
                         [
                             "606c813074aba4c8"
                         ]
                     ]
                 },
                 {
                     "id": "606c813074aba4c8",
                     "type": "junction",
                     "z": "7faa06d941e86452",
                     "x": 280,
                     "y": 440,
                     "wires": [
                         [
                             "8e380e141450fd22",
                             "373fa37357dc47dc",
                             "6932187427371fb5"
                         ]
                     ]
                 }
              ]
              

              Ich bin mir allerdings nicht sicher, ob es wirklich die ganzen Ausgaben braucht. Und payload in payload ist bissi verwirrend.

              e8d54233-555f-48db-9d5b-b49fee30cab3-image.png

              letztlich langt ja die Abfrage, ob isSame irgendwo true ist.

              payload.payload[isSame] ? payload.payload[isSame].%.Ferien : "keine Ferien"
              
              M 1 Reply Last reply Reply Quote 0
              • M
                MaGe @mickym last edited by

                @mickym said in JSONata loop - $moment > Invalid date?:

                Wow, herzlichen Dank für deine Unterstützung. 🙂
                Die Ausgabe der Ferien auf einmal ist genial.
                Der Vergleich hätte mich fast noch zum Verzeifeln gebracht. Da war das Umrechnung wegzulassen ausschlaggebend.

                Das mit dem payload im payload ist wirklich nicht optimal.
                Bei den ersten 3 Zeilen $start, $end, $diff im payload wird in der Ausgabe des payloads nur der letzte Wert, also $diff ausgegeben.
                So wollte ich es eigentlich für $isSame auch machen. Nur habe ich es anders mit der Schleife nicht hinbekommen.

                payload.{
                   "Ferien": $.name[language="DE"].text,
                   "start": $moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),
                   "end": $moment($.endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),
                   "payload": (
                       $start := $moment($moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                       $end := $moment($moment($.endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                       $diff := $end.diff($start, 'days');
                       ([0..$diff])@$day.{
                           "date": $moment($.startDate,'YYYY-MM-DD').add($day,'days').format('DD.MM.YYYY'),
                           "today": $moment().format('DD.MM.YYYY'),
                           "isSame": $moment($.startDate,'YYYY-MM-DD').add($day,'days').isSame($moment(),'day')
                           }   
                       )
                   }
                

                Bei den Feiertagen funktioniert es so, dass nur ein Wert übers payload ausgegeben wird.

                [
                   {
                       "Feiertag":"Neujahr",
                       "payload": (
                           $date := $moment($moment(payload[0].startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                           $today := $moment($moment().format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');
                           $date.isSame($today)
                           )
                }     
                ].payload
                
                mickym 1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @MaGe last edited by

                  @mage sagte in JSONata loop - $moment > Invalid date?:

                  Der Vergleich hätte mich fast noch zum Verzeifeln gebracht. Da war das Umrechnung wegzulassen ausschlaggebend.

                  Naja - ich hab doch auch tüfteln und probieren müssen. Aber manchmal macht das auch Spaß. Solche Fehler halt in den Bibliotheken, dass ein Vergleich nur in eine Richtung funktioniert muss man erst mal rausbekommen - da war ich auch schon am Verzweifeln - aber so denke ich hat man eine gute Lösung.

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    MaGe @mickym last edited by MaGe

                    @mickym said in JSONata loop - $moment > Invalid date?:

                    Spaß macht es auf jeden Fall. 🙂 Ich stoße beim tüfteln nur oft an meine Grenzen. JSONata ist für mich noch Neuland.

                    Nochmal vielen lieben Dank, dass du dich da so reingefuchst hast.

                    @mickym
                    Mein fertiger Flow für Feiertage und Schulferien zusammen:

                    [
                       {
                           "id": "2428c1679199ce79",
                           "type": "function",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Global:Feiertag",
                           "func": "msg.payload = global.get(\"Frei\");\nreturn msg;",
                           "outputs": 1,
                           "timeout": 0,
                           "noerr": 0,
                           "initialize": "",
                           "finalize": "",
                           "libs": [],
                           "x": 1740,
                           "y": 280,
                           "wires": [
                               [
                                   "16744919a414ee37"
                               ]
                           ]
                       },
                       {
                           "id": "16744919a414ee37",
                           "type": "debug",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Info",
                           "active": true,
                           "tosidebar": false,
                           "console": false,
                           "tostatus": true,
                           "complete": "payload",
                           "targetType": "msg",
                           "statusVal": "payload",
                           "statusType": "auto",
                           "x": 1910,
                           "y": 280,
                           "wires": []
                       },
                       {
                           "id": "27a3db497b5ec5d0",
                           "type": "inject",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Abfrage",
                           "props": [
                               {
                                   "p": "payload"
                               }
                           ],
                           "repeat": "",
                           "crontab": "06 00 * * *",
                           "once": true,
                           "onceDelay": "0.5",
                           "topic": "",
                           "payload": "",
                           "payloadType": "date",
                           "x": 1560,
                           "y": 280,
                           "wires": [
                               [
                                   "2428c1679199ce79"
                               ]
                           ]
                       },
                       {
                           "id": "2873966a84096291",
                           "type": "http request",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "https request",
                           "method": "GET",
                           "ret": "obj",
                           "paytoqs": "ignore",
                           "url": "",
                           "tls": "498c6e5f.1070f",
                           "persist": false,
                           "proxy": "",
                           "insecureHTTPParser": false,
                           "authType": "basic",
                           "senderr": false,
                           "headers": [],
                           "x": 1920,
                           "y": 120,
                           "wires": [
                               [
                                   "7a7a0f91d75faecf"
                               ]
                           ]
                       },
                       {
                           "id": "98eaa50401fd8651",
                           "type": "change",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "",
                           "rules": [
                               {
                                   "t": "set",
                                   "p": "url",
                                   "pt": "msg",
                                   "to": "payload",
                                   "tot": "msg"
                               },
                               {
                                   "t": "set",
                                   "p": "url",
                                   "pt": "msg",
                                   "to": "$.url",
                                   "tot": "jsonata"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 1890,
                           "y": 60,
                           "wires": [
                               [
                                   "2873966a84096291"
                               ]
                           ]
                       },
                       {
                           "id": "2b49ef7e9032ba65",
                           "type": "function",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Url",
                           "func": "msg.payload = `https://openholidaysapi.org/SchoolHolidays?countryIsoCode=DE&validFrom=${msg.payload}-01-01&validTo=${msg.payload}-12-31&languageIsoCode=DE&subdivisionCode=DE-BY`;\nreturn msg;\n\n",
                           "outputs": 1,
                           "timeout": "",
                           "noerr": 0,
                           "initialize": "",
                           "finalize": "",
                           "libs": [],
                           "x": 1710,
                           "y": 60,
                           "wires": [
                               [
                                   "98eaa50401fd8651"
                               ]
                           ]
                       },
                       {
                           "id": "668cd4c46954209e",
                           "type": "change",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Jahr",
                           "rules": [
                               {
                                   "t": "set",
                                   "p": "topic",
                                   "pt": "msg",
                                   "to": "Jahr",
                                   "tot": "str"
                               },
                               {
                                   "t": "set",
                                   "p": "payload",
                                   "pt": "msg",
                                   "to": "$moment().year() ",
                                   "tot": "jsonata"
                               },
                               {
                                   "t": "set",
                                   "p": "payload",
                                   "pt": "msg",
                                   "to": "$string(payload)",
                                   "tot": "jsonata"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 1710,
                           "y": 120,
                           "wires": [
                               [
                                   "2b49ef7e9032ba65"
                               ]
                           ]
                       },
                       {
                           "id": "081d12e755b9ae21",
                           "type": "inject",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Abfrage",
                           "props": [
                               {
                                   "p": "payload"
                               }
                           ],
                           "repeat": "",
                           "crontab": "05 00 * * *",
                           "once": true,
                           "onceDelay": "0.5",
                           "topic": "",
                           "payload": "",
                           "payloadType": "date",
                           "x": 1560,
                           "y": 140,
                           "wires": [
                               [
                                   "668cd4c46954209e",
                                   "ab40ce0d2f51afd7"
                               ]
                           ]
                       },
                       {
                           "id": "def42661118b4dd8",
                           "type": "change",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "",
                           "rules": [
                               {
                                   "t": "set",
                                   "p": "payload",
                                   "pt": "msg",
                                   "to": "payload.payload.isSame",
                                   "tot": "jsonata"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 2310,
                           "y": 120,
                           "wires": [
                               [
                                   "175999b28a5905ca"
                               ]
                           ]
                       },
                       {
                           "id": "1524c9b76d833a59",
                           "type": "http request",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "https request",
                           "method": "GET",
                           "ret": "obj",
                           "paytoqs": "ignore",
                           "url": "",
                           "tls": "498c6e5f.1070f",
                           "persist": false,
                           "proxy": "",
                           "insecureHTTPParser": false,
                           "authType": "basic",
                           "senderr": false,
                           "headers": [],
                           "x": 1920,
                           "y": 160,
                           "wires": [
                               [
                                   "ecf91cc75ee58cec"
                               ]
                           ]
                       },
                       {
                           "id": "ab40ce0d2f51afd7",
                           "type": "change",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Jahr",
                           "rules": [
                               {
                                   "t": "set",
                                   "p": "topic",
                                   "pt": "msg",
                                   "to": "Jahr",
                                   "tot": "str"
                               },
                               {
                                   "t": "set",
                                   "p": "payload",
                                   "pt": "msg",
                                   "to": "$moment().year() ",
                                   "tot": "jsonata"
                               },
                               {
                                   "t": "set",
                                   "p": "payload",
                                   "pt": "msg",
                                   "to": "$string(payload)",
                                   "tot": "jsonata"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 1710,
                           "y": 160,
                           "wires": [
                               [
                                   "12625be60bc8538d"
                               ]
                           ]
                       },
                       {
                           "id": "12625be60bc8538d",
                           "type": "function",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Url",
                           "func": "msg.payload = `https://openholidaysapi.org/PublicHolidays?countryIsoCode=DE&validFrom=${msg.payload}-01-01&validTo=${msg.payload}-12-31&languageIsoCode=DE&subdivisionCode=DE-BY`;\nreturn msg;",
                           "outputs": 1,
                           "timeout": "",
                           "noerr": 0,
                           "initialize": "",
                           "finalize": "",
                           "libs": [],
                           "x": 1710,
                           "y": 220,
                           "wires": [
                               [
                                   "1ffa03fb20ce426e"
                               ]
                           ]
                       },
                       {
                           "id": "1ffa03fb20ce426e",
                           "type": "change",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "",
                           "rules": [
                               {
                                   "t": "set",
                                   "p": "url",
                                   "pt": "msg",
                                   "to": "payload",
                                   "tot": "msg"
                               },
                               {
                                   "t": "set",
                                   "p": "url",
                                   "pt": "msg",
                                   "to": "$.url",
                                   "tot": "jsonata"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 1890,
                           "y": 220,
                           "wires": [
                               [
                                   "1524c9b76d833a59"
                               ]
                           ]
                       },
                       {
                           "id": "ecf91cc75ee58cec",
                           "type": "change",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Feiertage",
                           "rules": [
                               {
                                   "t": "delete",
                                   "p": "headers",
                                   "pt": "msg"
                               },
                               {
                                   "t": "delete",
                                   "p": "statusCode",
                                   "pt": "msg"
                               },
                               {
                                   "t": "delete",
                                   "p": "url",
                                   "pt": "msg"
                               },
                               {
                                   "t": "delete",
                                   "p": "responseUrl",
                                   "pt": "msg"
                               },
                               {
                                   "t": "delete",
                                   "p": "retry",
                                   "pt": "msg"
                               },
                               {
                                   "t": "delete",
                                   "p": "redirectList",
                                   "pt": "msg"
                               },
                               {
                                   "t": "set",
                                   "p": "payload",
                                   "pt": "msg",
                                   "to": "payload.{\t   \"Feiertag\": $.name[language=\"DE\"].text,\t   \"payload\": (\t       $date := $moment($.startDate,'YYYY-MM-DD');\t       $today := $moment();\t       $date.isSame($today)\t   )\t   }",
                                   "tot": "jsonata"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 2100,
                           "y": 160,
                           "wires": [
                               [
                                   "3da676eba96a5168"
                               ]
                           ]
                       },
                       {
                           "id": "8a5a46b1a1839d84",
                           "type": "debug",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Info",
                           "active": true,
                           "tosidebar": false,
                           "console": false,
                           "tostatus": true,
                           "complete": "payload",
                           "targetType": "msg",
                           "statusVal": "payload",
                           "statusType": "auto",
                           "x": 2990,
                           "y": 140,
                           "wires": []
                       },
                       {
                           "id": "83e59a86c8412805",
                           "type": "function",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "includes(true)",
                           "func": "const Frei = msg.payload[0] && msg.payload[1];\nmsg.payload = Frei.includes(true);\nreturn msg;",
                           "outputs": 1,
                           "timeout": "",
                           "noerr": 0,
                           "initialize": "",
                           "finalize": "",
                           "libs": [],
                           "x": 2680,
                           "y": 140,
                           "wires": [
                               [
                                   "ad9391d7ef4f1de7"
                               ]
                           ]
                       },
                       {
                           "id": "3da676eba96a5168",
                           "type": "change",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "",
                           "rules": [
                               {
                                   "t": "set",
                                   "p": "payload",
                                   "pt": "msg",
                                   "to": "payload.payload",
                                   "tot": "jsonata"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 2310,
                           "y": 160,
                           "wires": [
                               [
                                   "175999b28a5905ca"
                               ]
                           ]
                       },
                       {
                           "id": "175999b28a5905ca",
                           "type": "join",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "",
                           "mode": "custom",
                           "build": "array",
                           "property": "payload",
                           "propertyType": "msg",
                           "key": "topic",
                           "joiner": "\\n",
                           "joinerType": "str",
                           "accumulate": false,
                           "timeout": "",
                           "count": "2",
                           "reduceRight": false,
                           "reduceExp": "",
                           "reduceInit": "",
                           "reduceInitType": "",
                           "reduceFixup": "",
                           "x": 2510,
                           "y": 140,
                           "wires": [
                               [
                                   "83e59a86c8412805"
                               ]
                           ]
                       },
                       {
                           "id": "7a7a0f91d75faecf",
                           "type": "change",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Schulferien",
                           "rules": [
                               {
                                   "t": "delete",
                                   "p": "headers",
                                   "pt": "msg"
                               },
                               {
                                   "t": "delete",
                                   "p": "statusCode",
                                   "pt": "msg"
                               },
                               {
                                   "t": "delete",
                                   "p": "url",
                                   "pt": "msg"
                               },
                               {
                                   "t": "delete",
                                   "p": "responseUrl",
                                   "pt": "msg"
                               },
                               {
                                   "t": "delete",
                                   "p": "retry",
                                   "pt": "msg"
                               },
                               {
                                   "t": "delete",
                                   "p": "redirectList",
                                   "pt": "msg"
                               },
                               {
                                   "t": "set",
                                   "p": "payload",
                                   "pt": "msg",
                                   "to": "payload.{\t   \"Schulferien\": $.name[language=\"DE\"].text,\t   \"payload\": (\t       $start := $moment($moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t       $end := $moment($moment($.endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t       $diff := $end.diff($start, 'days');\t       ([0..$diff])@$day.{\t           \"date\": $moment($.startDate,'YYYY-MM-DD').add($day,'days').format('DD.MM.YYYY'),\t           \"today\": $moment().format('DD.MM.YYYY'),\t           \"isSame\": $moment($.startDate,'YYYY-MM-DD').add($day,'days').isSame($moment(),'days')\t           }   \t       )\t   }",
                                   "tot": "jsonata"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 2110,
                           "y": 120,
                           "wires": [
                               [
                                   "def42661118b4dd8"
                               ]
                           ]
                       },
                       {
                           "id": "ad9391d7ef4f1de7",
                           "type": "change",
                           "z": "2a5d5250.f178be",
                           "g": "d7ab92de65468601",
                           "name": "Frei",
                           "rules": [
                               {
                                   "t": "set",
                                   "p": "topic",
                                   "pt": "msg",
                                   "to": "Frei",
                                   "tot": "str"
                               },
                               {
                                   "t": "set",
                                   "p": "Frei",
                                   "pt": "global",
                                   "to": "payload",
                                   "tot": "msg"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 2850,
                           "y": 140,
                           "wires": [
                               [
                                   "8a5a46b1a1839d84"
                               ]
                           ]
                       },
                       {
                           "id": "498c6e5f.1070f",
                           "type": "tls-config",
                           "name": "",
                           "cert": "",
                           "key": "",
                           "ca": "",
                           "certname": "",
                           "keyname": "",
                           "caname": "",
                           "servername": "",
                           "verifyservercert": false,
                           "alpnprotocol": ""
                       }
                    ]
                    

                    flow_Schulferien_5.jpg

                    Nebenbei. Ist absolut erstaunlich wie enorm man einen Flow verschlanken kann.

                    1. Flow für die Feiertage:
                      flow_Feiertage.jpg
                    2. Flow für die Feiertage:
                      flow_Feiertage_1.jpg

                    Und der absolute Wahnsinn war das Abrufen auf einmal.
                    Dadurch redziert sich alleine bei den Feiertagen das JSONata von 106 auf 8 Zeilen in der change-node. 🙂

                    1 Reply Last reply Reply Quote 1
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    701
                    Online

                    31.7k
                    Users

                    79.7k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    235
                    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