Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Gelöst] Was tut die Funktion jsonataExpression

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    949

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[Gelöst] Was tut die Funktion jsonataExpression

Geplant Angeheftet Gesperrt Verschoben JavaScript
13 Beiträge 4 Kommentatoren 387 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • R ROGA

    als ich ein Blockly Script in direktes Javascript konvertiert hatte, fand ich darin die Funktion

    await jsonataExpression()
    

    Ich habe leider im ganzen Internet nichts darüber gefunden, was diese Funktion genaues tut.

    kann mir das jemand erklären?

    T Offline
    T Offline
    ticaki
    schrieb am zuletzt editiert von
    #3

    @roga
    http://docs.jsonata.org/using-nodejs

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    1 Antwort Letzte Antwort
    0
    • R ROGA

      als ich ein Blockly Script in direktes Javascript konvertiert hatte, fand ich darin die Funktion

      await jsonataExpression()
      

      Ich habe leider im ganzen Internet nichts darüber gefunden, was diese Funktion genaues tut.

      kann mir das jemand erklären?

      GlasfaserG Offline
      GlasfaserG Offline
      Glasfaser
      schrieb am zuletzt editiert von
      #4

      @roga sagte in Was tut die Funktion jsonataExpression:

      kann mir das jemand erklären?

      https://konfuzio.com/de/jsonata/

      Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

      1 Antwort Letzte Antwort
      0
      • mickymM Offline
        mickymM Offline
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #5

        Die Originialdokumentation findest Du hier: https://docs.jsonata.org/overview

        Das ist ein sehr leistungsfähige Bibliothek, die Dir in NodeRed(da wird es noch viel mehr eingesetzt), in Javascript oder Blockly verwendet. Gerade das Blockly kann überhaupt nicht gut mit Objekten umgehen. Deswegen habe ich schon oft versucht auch Puzzle Freunde mit dieser genialen Bibliothek vertraut zu machen.

        In der Doku findest Du auch ein try Fenster (das Du auch teilen kannst). Da kannst Du links selbst Eingangsdaten erstellen - rechts oben gibst Du Deinen Code ein - und unten siehst Du das Ergebnis.

        Wenn Du da Hilfe brauchst - dann melde Dich mal - um Dir zu zeigen, wie effizient diese Bibliothek ist - folgendes Beispiel:

        Selbst wenn das folgende Array nicht bereist sortiert wäre:

        [{"total":0.274,"energy":0.0742,"tax":0.1998,"startsAt":"2023-09-22T14:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2783,"energy":0.0778,"tax":0.2005,"startsAt":"2023-09-22T13:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2798,"energy":0.079,"tax":0.2008,"startsAt":"2023-09-22T15:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2877,"energy":0.0856,"tax":0.2021,"startsAt":"2023-09-22T12:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2895,"energy":0.0872,"tax":0.2023,"startsAt":"2023-09-22T01:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2905,"energy":0.088,"tax":0.2025,"startsAt":"2023-09-22T02:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2908,"energy":0.0883,"tax":0.2025,"startsAt":"2023-09-22T00:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2908,"energy":0.0882,"tax":0.2026,"startsAt":"2023-09-22T16:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2914,"energy":0.0888,"tax":0.2026,"startsAt":"2023-09-22T03:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.294,"energy":0.091,"tax":0.203,"startsAt":"2023-09-22T04:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.294,"energy":0.0909,"tax":0.2031,"startsAt":"2023-09-22T11:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2948,"energy":0.0917,"tax":0.2031,"startsAt":"2023-09-22T05:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3043,"energy":0.0996,"tax":0.2047,"startsAt":"2023-09-22T10:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3084,"energy":0.1031,"tax":0.2053,"startsAt":"2023-09-22T23:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3118,"energy":0.1059,"tax":0.2059,"startsAt":"2023-09-22T22:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3131,"energy":0.107,"tax":0.2061,"startsAt":"2023-09-22T17:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3198,"energy":0.1126,"tax":0.2072,"startsAt":"2023-09-22T06:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3221,"energy":0.1146,"tax":0.2075,"startsAt":"2023-09-22T21:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3265,"energy":0.1183,"tax":0.2082,"startsAt":"2023-09-22T09:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3446,"energy":0.1334,"tax":0.2112,"startsAt":"2023-09-22T20:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3473,"energy":0.1358,"tax":0.2115,"startsAt":"2023-09-22T08:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3481,"energy":0.1364,"tax":0.2117,"startsAt":"2023-09-22T18:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.35,"energy":0.138,"tax":0.212,"startsAt":"2023-09-22T07:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.376,"energy":0.1599,"tax":0.2161,"startsAt":"2023-09-22T19:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"}]
        

        bekommst Du mit JSONATA mit einem simplen Einzeiler (in Blockly und JavaScript müsstest Du mindestens 2 mal Schleifen durchlaufen):

        $[total=$min($$.total)].startsAt
        

        die Uhrzeit raus, an dem der günstigeste Preis existiert. Wie gesagt dieses Array könnte auch völlig unsortiert sein. Du müssest also keine Sortierroutinen schreiben und Blockly kann sowas schon gar nicht. Und so was kannst Du in dem try Fenster selbst ausprobieren.

        d630a178-9f37-43ed-a2bd-e1bb5eb1da56-image.png

        Hier mal zum selbst ausprobieren: https://try.jsonata.org/qD4MSRGIg

        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

        R 1 Antwort Letzte Antwort
        0
        • mickymM mickym

          Die Originialdokumentation findest Du hier: https://docs.jsonata.org/overview

          Das ist ein sehr leistungsfähige Bibliothek, die Dir in NodeRed(da wird es noch viel mehr eingesetzt), in Javascript oder Blockly verwendet. Gerade das Blockly kann überhaupt nicht gut mit Objekten umgehen. Deswegen habe ich schon oft versucht auch Puzzle Freunde mit dieser genialen Bibliothek vertraut zu machen.

          In der Doku findest Du auch ein try Fenster (das Du auch teilen kannst). Da kannst Du links selbst Eingangsdaten erstellen - rechts oben gibst Du Deinen Code ein - und unten siehst Du das Ergebnis.

          Wenn Du da Hilfe brauchst - dann melde Dich mal - um Dir zu zeigen, wie effizient diese Bibliothek ist - folgendes Beispiel:

          Selbst wenn das folgende Array nicht bereist sortiert wäre:

          [{"total":0.274,"energy":0.0742,"tax":0.1998,"startsAt":"2023-09-22T14:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2783,"energy":0.0778,"tax":0.2005,"startsAt":"2023-09-22T13:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2798,"energy":0.079,"tax":0.2008,"startsAt":"2023-09-22T15:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2877,"energy":0.0856,"tax":0.2021,"startsAt":"2023-09-22T12:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2895,"energy":0.0872,"tax":0.2023,"startsAt":"2023-09-22T01:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2905,"energy":0.088,"tax":0.2025,"startsAt":"2023-09-22T02:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2908,"energy":0.0883,"tax":0.2025,"startsAt":"2023-09-22T00:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2908,"energy":0.0882,"tax":0.2026,"startsAt":"2023-09-22T16:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2914,"energy":0.0888,"tax":0.2026,"startsAt":"2023-09-22T03:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.294,"energy":0.091,"tax":0.203,"startsAt":"2023-09-22T04:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.294,"energy":0.0909,"tax":0.2031,"startsAt":"2023-09-22T11:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2948,"energy":0.0917,"tax":0.2031,"startsAt":"2023-09-22T05:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3043,"energy":0.0996,"tax":0.2047,"startsAt":"2023-09-22T10:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3084,"energy":0.1031,"tax":0.2053,"startsAt":"2023-09-22T23:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3118,"energy":0.1059,"tax":0.2059,"startsAt":"2023-09-22T22:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3131,"energy":0.107,"tax":0.2061,"startsAt":"2023-09-22T17:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3198,"energy":0.1126,"tax":0.2072,"startsAt":"2023-09-22T06:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3221,"energy":0.1146,"tax":0.2075,"startsAt":"2023-09-22T21:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3265,"energy":0.1183,"tax":0.2082,"startsAt":"2023-09-22T09:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3446,"energy":0.1334,"tax":0.2112,"startsAt":"2023-09-22T20:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3473,"energy":0.1358,"tax":0.2115,"startsAt":"2023-09-22T08:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3481,"energy":0.1364,"tax":0.2117,"startsAt":"2023-09-22T18:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.35,"energy":0.138,"tax":0.212,"startsAt":"2023-09-22T07:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.376,"energy":0.1599,"tax":0.2161,"startsAt":"2023-09-22T19:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"}]
          

          bekommst Du mit JSONATA mit einem simplen Einzeiler (in Blockly und JavaScript müsstest Du mindestens 2 mal Schleifen durchlaufen):

          $[total=$min($$.total)].startsAt
          

          die Uhrzeit raus, an dem der günstigeste Preis existiert. Wie gesagt dieses Array könnte auch völlig unsortiert sein. Du müssest also keine Sortierroutinen schreiben und Blockly kann sowas schon gar nicht. Und so was kannst Du in dem try Fenster selbst ausprobieren.

          d630a178-9f37-43ed-a2bd-e1bb5eb1da56-image.png

          Hier mal zum selbst ausprobieren: https://try.jsonata.org/qD4MSRGIg

          R Offline
          R Offline
          ROGA
          schrieb am zuletzt editiert von ROGA
          #6

          Vielen Dank für eure Hilfe! Ich habe mir das wesenlich einfacher vorgestellt, als was die Doku darüber erzählt. Ich dachte, es wäre einfach nur eine "normale" Funktion, wie z.B. formatDate(), console.log(), JSON.stringify() etc. etc. aber das scheint hier nicht der Fall zu sein. Das es sich dabei um eine Bibliothek handelt, war mir nicht bewusst. Da ich kein Programmierer bin, ist mir das irgendwie zu kompliziert. Ich komme gerade so halbwegs mit dem Scripten voran, da wird's mir bei Jsonata definitiv zu kompliziert. :-(

          Trotzdem allen ein herzliches Dankeschön! Wenigstens weiss ich jetzt, dass ich es nicht so einfach einsetzen kann.

          LG Roli

          mickymM T 2 Antworten Letzte Antwort
          0
          • R ROGA

            Vielen Dank für eure Hilfe! Ich habe mir das wesenlich einfacher vorgestellt, als was die Doku darüber erzählt. Ich dachte, es wäre einfach nur eine "normale" Funktion, wie z.B. formatDate(), console.log(), JSON.stringify() etc. etc. aber das scheint hier nicht der Fall zu sein. Das es sich dabei um eine Bibliothek handelt, war mir nicht bewusst. Da ich kein Programmierer bin, ist mir das irgendwie zu kompliziert. Ich komme gerade so halbwegs mit dem Scripten voran, da wird's mir bei Jsonata definitiv zu kompliziert. :-(

            Trotzdem allen ein herzliches Dankeschön! Wenigstens weiss ich jetzt, dass ich es nicht so einfach einsetzen kann.

            mickymM Offline
            mickymM Offline
            mickym
            Most Active
            schrieb am zuletzt editiert von
            #7

            @roga Na Du kannst es auch ganz einfach einsetzen - Du musst halt nur sagen, was Du willst und dann schauen wir uns das an.Oder gerade zum Formatieren von Werten.

            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

            R 1 Antwort Letzte Antwort
            0
            • R ROGA

              Vielen Dank für eure Hilfe! Ich habe mir das wesenlich einfacher vorgestellt, als was die Doku darüber erzählt. Ich dachte, es wäre einfach nur eine "normale" Funktion, wie z.B. formatDate(), console.log(), JSON.stringify() etc. etc. aber das scheint hier nicht der Fall zu sein. Das es sich dabei um eine Bibliothek handelt, war mir nicht bewusst. Da ich kein Programmierer bin, ist mir das irgendwie zu kompliziert. Ich komme gerade so halbwegs mit dem Scripten voran, da wird's mir bei Jsonata definitiv zu kompliziert. :-(

              Trotzdem allen ein herzliches Dankeschön! Wenigstens weiss ich jetzt, dass ich es nicht so einfach einsetzen kann.

              T Offline
              T Offline
              ticaki
              schrieb am zuletzt editiert von
              #8

              @roga
              Ja ist kompliziert. Wenn du aber Json-Daten konvertieren willst ist es am Ende einfach als das ganze in Javascript zu schreiben und erst recht als Blockly.

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              1 Antwort Letzte Antwort
              0
              • mickymM mickym

                @roga Na Du kannst es auch ganz einfach einsetzen - Du musst halt nur sagen, was Du willst und dann schauen wir uns das an.Oder gerade zum Formatieren von Werten.

                R Offline
                R Offline
                ROGA
                schrieb am zuletzt editiert von
                #9

                @mickym

                naja, eigenlich hat ja Blockly das Javascript quasi für mich geschrieben. Ich wollte halt jetzt nur verstehen, was genau da passiert.

                Als Beispiel:

                Ich frage meine SQL-DB nach dem Gesamtverbrauch in KWh des gestrigen Tages ab:

                DPPath = 'javascript.0.Energieverbrauch.Täglich.';
                
                Query = 'SELECT date(from_unixtime(ts/1000)) as Intervall, ' +
                	'       round((max(val)  - min(val)) / 1000, 2) as KWh, ' +
                	'       max(val) as MaxZählerstand, ' +
                	'       min(val) as MinZählerstand ' +
                	'FROM iobroker.ts_number where id=10 and ' +
                	'       val is not null and ' +
                	'       date(from_unixtime(ts/1000)) = date(now()) - interval 1 day ' +
                	'group by Intervall;';
                
                Response  = JSON.parse(JSON.stringify(await sendToAsync('sql.0', 'query', Query)));
                SQLResult = Response.result;
                
                

                und erhalten als Rückgabewert mit console.log(JSON.stringify(SQLResult)) folgede Daten im JSON-Format:

                [{"Intervall":"2023-10-13T22:00:00.000Z","KWh":14.26,"MaxZählerstand":3295036.8,"MinZählerstand":3280780.5}]
                

                Nun möchte ich daraus die "KWh" und das "Intervall" (entspricht dem Datum des gestrigen Tages) in die Variable "ConsumedPower" bzw. "Datum" extrahieren.

                for (Item in SQLResult) {
                      ConsumedPower = parseFloat(JSON.stringify(SQLResult[Item].KWh));
                      Datum = formatDate(getDateObject((await jsonataExpression(SQLResult[Item],'Intervall'))), "YYYY.MM.DD");
                };
                

                und an dieser Stelle habe ich eben das JsonataExpression() gesehen. Ich habe mir gedacht, wieso braucht's diese Funktion, kann das nicht so ähnlich extrahiert werden, wie "ConsumedPower"? also so:

                Datum = formatDate(getDateObject(JSON.stringify(SQLResult[Item].Intervall)), 'YYYY.MM.DD');
                

                Doch das gab mir kein Datum mehr zurück (undefined oder so). Auch ist mir aufgefallen, dass im Rückgabewert für das Datum das Format 'ISO-8601' ausgegeben wurde und das eigentliche Tagesdatum nicht gestern, sondern von vorgestern enthält:

                "Intervall":"2023-10-13T22:00:00.000Z"
                

                Wie gesagt, wenn ich das Datum mit jsonataExpression() extrahiere, erhalte ich das richtige Datum, so wie ich es gerne hätte:

                Datum = formatDate(getDateObject((await jsonataExpression(SQLResult[Item],'Intervall'))), "YYYY.MM.DD");
                
                console.log('Datum=' + Datum);
                
                

                Rückabe:

                Datum=2023.10.14
                

                Und deshalb wollte ich wissen, was macht diese Funktion jsonataExpression() genau, bzw. wie wird aus diesem ISO-8601 Datumsformat (dessen Tag ja nicht gestern, sonder vorgestern ist) dass korrekte Datum von gestern??????

                Ich hoffe, ich hab's irgendwie halbwegs verständlich erklärt, sonst einfach fragen.

                schönes Wochenende

                LG Roli

                T mickymM 2 Antworten Letzte Antwort
                0
                • R ROGA

                  @mickym

                  naja, eigenlich hat ja Blockly das Javascript quasi für mich geschrieben. Ich wollte halt jetzt nur verstehen, was genau da passiert.

                  Als Beispiel:

                  Ich frage meine SQL-DB nach dem Gesamtverbrauch in KWh des gestrigen Tages ab:

                  DPPath = 'javascript.0.Energieverbrauch.Täglich.';
                  
                  Query = 'SELECT date(from_unixtime(ts/1000)) as Intervall, ' +
                  	'       round((max(val)  - min(val)) / 1000, 2) as KWh, ' +
                  	'       max(val) as MaxZählerstand, ' +
                  	'       min(val) as MinZählerstand ' +
                  	'FROM iobroker.ts_number where id=10 and ' +
                  	'       val is not null and ' +
                  	'       date(from_unixtime(ts/1000)) = date(now()) - interval 1 day ' +
                  	'group by Intervall;';
                  
                  Response  = JSON.parse(JSON.stringify(await sendToAsync('sql.0', 'query', Query)));
                  SQLResult = Response.result;
                  
                  

                  und erhalten als Rückgabewert mit console.log(JSON.stringify(SQLResult)) folgede Daten im JSON-Format:

                  [{"Intervall":"2023-10-13T22:00:00.000Z","KWh":14.26,"MaxZählerstand":3295036.8,"MinZählerstand":3280780.5}]
                  

                  Nun möchte ich daraus die "KWh" und das "Intervall" (entspricht dem Datum des gestrigen Tages) in die Variable "ConsumedPower" bzw. "Datum" extrahieren.

                  for (Item in SQLResult) {
                        ConsumedPower = parseFloat(JSON.stringify(SQLResult[Item].KWh));
                        Datum = formatDate(getDateObject((await jsonataExpression(SQLResult[Item],'Intervall'))), "YYYY.MM.DD");
                  };
                  

                  und an dieser Stelle habe ich eben das JsonataExpression() gesehen. Ich habe mir gedacht, wieso braucht's diese Funktion, kann das nicht so ähnlich extrahiert werden, wie "ConsumedPower"? also so:

                  Datum = formatDate(getDateObject(JSON.stringify(SQLResult[Item].Intervall)), 'YYYY.MM.DD');
                  

                  Doch das gab mir kein Datum mehr zurück (undefined oder so). Auch ist mir aufgefallen, dass im Rückgabewert für das Datum das Format 'ISO-8601' ausgegeben wurde und das eigentliche Tagesdatum nicht gestern, sondern von vorgestern enthält:

                  "Intervall":"2023-10-13T22:00:00.000Z"
                  

                  Wie gesagt, wenn ich das Datum mit jsonataExpression() extrahiere, erhalte ich das richtige Datum, so wie ich es gerne hätte:

                  Datum = formatDate(getDateObject((await jsonataExpression(SQLResult[Item],'Intervall'))), "YYYY.MM.DD");
                  
                  console.log('Datum=' + Datum);
                  
                  

                  Rückabe:

                  Datum=2023.10.14
                  

                  Und deshalb wollte ich wissen, was macht diese Funktion jsonataExpression() genau, bzw. wie wird aus diesem ISO-8601 Datumsformat (dessen Tag ja nicht gestern, sonder vorgestern ist) dass korrekte Datum von gestern??????

                  Ich hoffe, ich hab's irgendwie halbwegs verständlich erklärt, sonst einfach fragen.

                  schönes Wochenende

                  T Offline
                  T Offline
                  ticaki
                  schrieb am zuletzt editiert von
                  #10

                  @roga sagte in [Gelöst] Was tut die Funktion jsonataExpression:

                  Datum = formatDate(getDateObject(JSON.stringify(SQLResult[Item].Intervall)), 'YYYY.MM.DD');

                  Da das Datum im JSON Format vorliegt reicht auch:

                  Datum = formatDate(new Date(SQLResult[Item].Intervall), 'YYYY.MM.DD');
                  

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  R 1 Antwort Letzte Antwort
                  0
                  • T ticaki

                    @roga sagte in [Gelöst] Was tut die Funktion jsonataExpression:

                    Datum = formatDate(getDateObject(JSON.stringify(SQLResult[Item].Intervall)), 'YYYY.MM.DD');

                    Da das Datum im JSON Format vorliegt reicht auch:

                    Datum = formatDate(new Date(SQLResult[Item].Intervall), 'YYYY.MM.DD');
                    
                    R Offline
                    R Offline
                    ROGA
                    schrieb am zuletzt editiert von
                    #11

                    @ticaki sagte in [Gelöst] Was tut die Funktion jsonataExpression:

                    Da das Datum im JSON Format vorliegt reicht auch:
                    Datum = formatDate(new Date(SQLResult[Item].Intervall), 'YYYY.MM.DD');

                    LOL :-)

                    Jetzt weiss ich zwar immer noch nicht, wie jsonataExpression() die Konvertierung gemacht hat, aber diese Lösung verstehe ich jetzt und sie funktioniert tatsächlich!!!!!

                    Vielen lieben Dank!

                    LG Roli

                    1 Antwort Letzte Antwort
                    0
                    • R ROGA

                      @mickym

                      naja, eigenlich hat ja Blockly das Javascript quasi für mich geschrieben. Ich wollte halt jetzt nur verstehen, was genau da passiert.

                      Als Beispiel:

                      Ich frage meine SQL-DB nach dem Gesamtverbrauch in KWh des gestrigen Tages ab:

                      DPPath = 'javascript.0.Energieverbrauch.Täglich.';
                      
                      Query = 'SELECT date(from_unixtime(ts/1000)) as Intervall, ' +
                      	'       round((max(val)  - min(val)) / 1000, 2) as KWh, ' +
                      	'       max(val) as MaxZählerstand, ' +
                      	'       min(val) as MinZählerstand ' +
                      	'FROM iobroker.ts_number where id=10 and ' +
                      	'       val is not null and ' +
                      	'       date(from_unixtime(ts/1000)) = date(now()) - interval 1 day ' +
                      	'group by Intervall;';
                      
                      Response  = JSON.parse(JSON.stringify(await sendToAsync('sql.0', 'query', Query)));
                      SQLResult = Response.result;
                      
                      

                      und erhalten als Rückgabewert mit console.log(JSON.stringify(SQLResult)) folgede Daten im JSON-Format:

                      [{"Intervall":"2023-10-13T22:00:00.000Z","KWh":14.26,"MaxZählerstand":3295036.8,"MinZählerstand":3280780.5}]
                      

                      Nun möchte ich daraus die "KWh" und das "Intervall" (entspricht dem Datum des gestrigen Tages) in die Variable "ConsumedPower" bzw. "Datum" extrahieren.

                      for (Item in SQLResult) {
                            ConsumedPower = parseFloat(JSON.stringify(SQLResult[Item].KWh));
                            Datum = formatDate(getDateObject((await jsonataExpression(SQLResult[Item],'Intervall'))), "YYYY.MM.DD");
                      };
                      

                      und an dieser Stelle habe ich eben das JsonataExpression() gesehen. Ich habe mir gedacht, wieso braucht's diese Funktion, kann das nicht so ähnlich extrahiert werden, wie "ConsumedPower"? also so:

                      Datum = formatDate(getDateObject(JSON.stringify(SQLResult[Item].Intervall)), 'YYYY.MM.DD');
                      

                      Doch das gab mir kein Datum mehr zurück (undefined oder so). Auch ist mir aufgefallen, dass im Rückgabewert für das Datum das Format 'ISO-8601' ausgegeben wurde und das eigentliche Tagesdatum nicht gestern, sondern von vorgestern enthält:

                      "Intervall":"2023-10-13T22:00:00.000Z"
                      

                      Wie gesagt, wenn ich das Datum mit jsonataExpression() extrahiere, erhalte ich das richtige Datum, so wie ich es gerne hätte:

                      Datum = formatDate(getDateObject((await jsonataExpression(SQLResult[Item],'Intervall'))), "YYYY.MM.DD");
                      
                      console.log('Datum=' + Datum);
                      
                      

                      Rückabe:

                      Datum=2023.10.14
                      

                      Und deshalb wollte ich wissen, was macht diese Funktion jsonataExpression() genau, bzw. wie wird aus diesem ISO-8601 Datumsformat (dessen Tag ja nicht gestern, sonder vorgestern ist) dass korrekte Datum von gestern??????

                      Ich hoffe, ich hab's irgendwie halbwegs verständlich erklärt, sonst einfach fragen.

                      schönes Wochenende

                      mickymM Offline
                      mickymM Offline
                      mickym
                      Most Active
                      schrieb am zuletzt editiert von mickym
                      #12

                      @roga Also nur um es grundsätzlich mal klar zustellen, ich habe jetzt mal zur Sicherheit in ein Objekt gewandelt.

                      Mit $ greifst Du auf das ganze Objekt zu, dass Du sonst via Attribut von .. bekommst.

                      05e6299f-c96d-4c67-a932-082c9d4d2a11-image.png

                      Das ganze hat mit JSONATA also nichts zu tun.

                      Diese Zeit ist

                      "Intervall":"2023-10-13T22:00:00.000Z"
                      

                      ist auch korrekt - da in allen Datenbanken die UTC gespeichert wird. Sprich diese Zeit entspricht 0:00 Uhr am 14.10.2023 - da UTC ja 2 Std. nachhängt.

                      Die Konvertierung liegt ggf. daran, dass daraus die lokale Zeit gemacht wurde.

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      R 1 Antwort Letzte Antwort
                      0
                      • mickymM mickym

                        @roga Also nur um es grundsätzlich mal klar zustellen, ich habe jetzt mal zur Sicherheit in ein Objekt gewandelt.

                        Mit $ greifst Du auf das ganze Objekt zu, dass Du sonst via Attribut von .. bekommst.

                        05e6299f-c96d-4c67-a932-082c9d4d2a11-image.png

                        Das ganze hat mit JSONATA also nichts zu tun.

                        Diese Zeit ist

                        "Intervall":"2023-10-13T22:00:00.000Z"
                        

                        ist auch korrekt - da in allen Datenbanken die UTC gespeichert wird. Sprich diese Zeit entspricht 0:00 Uhr am 14.10.2023 - da UTC ja 2 Std. nachhängt.

                        Die Konvertierung liegt ggf. daran, dass daraus die lokale Zeit gemacht wurde.

                        R Offline
                        R Offline
                        ROGA
                        schrieb am zuletzt editiert von
                        #13

                        @mickym sagte

                        "Intervall":"2023-10-13T22:00:00.000Z"
                        

                        ist auch korrekt - da in allen Datenbanken die UTC gespeichert wird. Sprich diese Zeit entspricht 0:00 Ihr am 14.10.2023 - da UTC ja 2 Std. nachhängt.

                        Die Konvertierung liegt ggf. daran, dass daraus die lokale Zeit gemacht wurde.

                        Ach so! Jetzt verstehe ich das auch, ja macht durchaus Sinn und so gesehen ist es dann tatsächlich der 14.10.2023.

                        Wieder etwas wichtiges dazugelernt, vielen Dank!

                        LG Roli

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        649

                        Online

                        32.6k

                        Benutzer

                        82.2k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe