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. Off Topic
  4. JSON Objekte in Liste

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill lĂ€uft aus ?
    apollon77A
    apollon77
    48
    3
    8.6k

  • MonatsrĂŒckblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.9k

JSON Objekte in Liste

Geplant Angeheftet Gesperrt Verschoben Off Topic
94 BeitrÀge 3 Kommentatoren 8.2k Aufrufe 2 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.
  • L legro

    [@mickym sagte in JSON Objekte in Liste:

    @legro Du musst halt fragen, wenn Du was nicht verstehst. ..

    Dann will ich dich mal beim Wort nehmen.:slightly_smiling_face: WĂ€hrend du fĂŒr mich deine Lösungen zusammengebastelt hast, war ich nĂ€mlich nicht untĂ€tig.

    Nachdem wir ja die Aufgabenstellung zerlegt hatten in ..

    1. Summe der Produkte (Wert * Energiepreis) und ..
    2. Summe der Differenzen auf einanderfolgender ARRAY-Elemente, ..

    .. versuchte ich aus diesen beiden Gedanken die Lösung zusammenzubasteln. Leider mit viel wenig Erfolg.:confused:

    1. Produktsumme

    a4475b4a-e3cd-470e-b613-0ff7880a8357-image.png

    In diesem ARRAY galt es nun mittels der ersten Idee die Differenzsummen zu bilden, was mir nicht gelang, weil ich diese deine oben angegebene Lösung hierzu letztendlich wohl nicht tiefgreifend genug verstanden habe.

    1. Differenzsumme

    8f9f71bb-a9aa-4501-9bb1-79f9ffcea3f6-image.png

    Die Kodierung $#$i.[$$[$i+1]-$$[$i]] verstehe ich nur teilweise. Hier, was ich glaube, verstanden zu haben ..

    • $ steht fĂŒr einen relativen Pfad. (Am Anfang hĂ€tte also auch $$ stehen können.)
    • $$ steht fĂŒr den absoluten (gesamten) Pfad von Beginn an.
    • $i steht fĂŒr eine - nennen wie sie mal - Hilfsvariable (und könnte auch ganz anders heißen).
    • Aber was macht der Operator '#' genau? Pappt er (wie auch '@') den Pfad aus $ an die Variable $i und bezeichnet damit in der Ausgabe das ermittelte ARRAY-Element (Differenz).
    • [$$[$i+1]-$$[$i]] bildet die Differenz zweier aufeinander folgender Element, die durch die Indizes $i und $i+1 referenziert werden.

    Was ich mich frage ..

    • Könnte man nicht die beiden AnsĂ€tze 1. und 2. zu einer Lösung zusammenfĂŒgen? Wenn ja, wie?
    • Was mich nach wie vor völlig verwirrt, ist die Tatsache, dass keinerlei Syntax auf eine Kontrollstruktur (hier wird ja wohl eine Schleife erzeugt) zu sehen ist.
    • Auch verstehe ich nicht, warum ich nicht in Anlehnung aus deiner Lösung zu 2. in 1. hĂ€tte kodieren können [ZĂ€hlerStĂ€nde.Bezug[$i].Wert * ZĂ€hlerStĂ€nde.Bezug[$i].Wert.Energiepreis]
    mickymM Offline
    mickymM Offline
    mickym
    Most Active
    schrieb am zuletzt editiert von mickym
    #83

    @legro sagte in JSON Objekte in Liste:

    [@mickym sagte in JSON Objekte in Liste:

    @legro Du musst halt fragen, wenn Du was nicht verstehst. ..

    Dann will ich dich mal beim Wort nehmen.:slightly_smiling_face: WĂ€hrend du fĂŒr mich deine Lösungen zusammengebastelt hast, war ich nĂ€mlich nicht untĂ€tig.

    Nun manches kann ich erklĂ€ren, manches nicht. Manchmal muss ich auch ausprobieren und ich habe auch erst lange gebraucht bis ich es einigermaßen verstanden habe. Manches habe ich aber auch nicht verstanden. Was ich nicht verstehe, warum DU nicht meine endgĂŒltige Lösung nimmst, die funktioniert (nĂ€mlich die mit der $reduce Funktion). Die lĂ€sst Du bei den Fragen hier komplett außen vor.

    GrundsÀtzlich ist es so, dass JSONATA eine mÀchtige Bibliothek ist, aber kein Compiler und auch kein Interpreter, wie Du ihn bei klassischen Programmiertools findest. Deswegen kannst Du JSONATA in andere Tools einbinden, aber es hat kein GedÀchtnis. Deshalb schon mal ein Grundsatz, den Du Dir unbedingt merken musst.
    JSONATA arbeitet einfach die Anweisungen von links nach rechts (oder oben nach unten ab) und kann NICHT auf Ergebnisse zurĂŒckgreifen oder auf Strukturen zurĂŒckgreifen, die sich wĂ€hrend der Abarbeitung ergeben. Du hast lediglich den Anker $$, der immer auf das unverfĂ€lschte Eingangsobjekt zugreifen kann. $ hingegen enthĂ€lt immer den aktuellen Kontext, der NICHT fest ist sondern wo Du Dich gerade in einer Objekthierarchie befindest. Das musst Du im Hinterkopf haben und deshalb funktioniert das Kombinieren der beiden Methoden mit komplexen Objekten eben nicht und ich habe auf die $reduce Funktion zurĂŒck gegriffen.

    Nachdem wir ja die Aufgabenstellung zerlegt hatten in ..

    1. Summe der Produkte (Wert * Energiepreis) und ..
    2. Summe der Differenzen auf einanderfolgender ARRAY-Elemente, ..

    .. versuchte ich aus diesen beiden Gedanken die Lösung zusammenzubasteln. Leider mit viel wenig Erfolg.:confused:

    Die Differenzsumme mit diesen Mitteln zu erreichen, ist von der Syntax sehr kompliziert, weil Du IMMER den vollstÀndigen Pfad von der Wurzel aus referenzieren musst. Bei dem einfachen Array ging das - deswegen ist die $reduce Funktion wesentlich besser, da Du hier sowohl relativ als auch auf den Dich beziehenden Teil des Arrays Dich beziehen kannst.

    1. Produktsumme

    a4475b4a-e3cd-470e-b613-0ff7880a8357-image.png

    In diesem ARRAY galt es nun mittels der ersten Idee die Differenzsummen zu bilden, was mir nicht gelang, weil ich diese deine oben angegebene Lösung hierzu letztendlich wohl nicht tiefgreifend genug verstanden habe.

    Das ist eine geniale Möglichkeit von JSONATA, das funktioniert aber nur innerhalb von Objekten, die ein Index gerade durchlĂ€uft. DU kannst NICHT auf Elemente vorher und hinterher zurĂŒckgreifen, da JSONATA die nicht kennt. Zumindest nicht ohne Dich wieder auf das root-Objekt zu beziehen und nicht im aktuellen Kontext.

    1. Differenzsumme

    8f9f71bb-a9aa-4501-9bb1-79f9ffcea3f6-image.png

    Die Kodierung $#$i.[$$[$i+1]-$$[$i]] verstehe ich nur teilweise. Hier, was ich glaube, verstanden zu haben ..

    • $ steht fĂŒr einen relativen Pfad. (Am Anfang hĂ€tte also auch $$ stehen können.)

    Ja fĂŒr den aktuellen Kontext. Stimmt am Anfang entspricht $ = $$. Sobald Du aber ein Objekt darunter ansprichst z.Bsp. $.ZĂ€hlerstĂ€nde - enthĂ€lt nun die Variable $ das Array aber nicht mehr das gesamte Objekt wie $$.

    • $$ steht fĂŒr den absoluten (gesamten) Pfad von Beginn an.

    Einfach das GESAMTE Objekt oder Array (so wie es im linken Fenster steht)

    • $i steht fĂŒr eine - nennen wie sie mal - Hilfsvariable (und könnte auch ganz anders heißen).
      Ja - ich hÀtte es auch $index nennen können. Alle Variablen in JSONATA beginnen mit einem $
    • Aber was macht der Operator '#' genau? Pappt er (wie auch '@') den Pfad aus $ an die Variable $i und bezeichnet damit in der Ausgabe das ermittelte ARRAY-Element (Differenz).

    Er weist der darauffolgenden Variable den aktuellen Index, der beim Durchlaufen eines Arrays gebildet wird. Wenn Du Dein Array ZÀhlerstÀnde anschaust, dann hat es genau 3 Elemente, die kannst Du so referenzieren.

    https://try.jsonata.org/Car4x9aq9

    • [$$[$i+1]-$$[$i]] bildet die Differenz zweier aufeinander folgender Element, die durch die Indizes $i und $i+1 referenziert werden.

    Was ich mich frage ..

    • Könnte man nicht die beiden AnsĂ€tze 1. und 2. zu einer Lösung zusammenfĂŒgen? Wenn ja, wie?

    Ich habe es mal gemacht und habe den Ansatz 2 aus der Differensumme mit Deinem Objekt berechnet:
    https://try.jsonata.org/iqLO5ZyO9

    ac58db23-b00c-4531-b915-d6552897d35d-image.png

    [$sum($.ZÀhlerStÀnde.Bezug#$Index.[($$.ZÀhlerStÀnde.Bezug[$Index+1].Wert-$$.ZÀhlerStÀnde.Bezug[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Bezug[$Index+1].Energiepreis]),
    $sum($.ZÀhlerStÀnde.Verkauf#$Index.[($$.ZÀhlerStÀnde.Verkauf[$Index+1].Wert-$$.ZÀhlerStÀnde.Verkauf[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Verkauf[$Index+1].Energiepreis]),
    $sum($.ZÀhlerStÀnde.Erzeugt#$Index.[($$.ZÀhlerStÀnde.Erzeugt[$Index+1].Wert-$$.ZÀhlerStÀnde.Erzeugt[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Erzeugt[$Index+1].Energiepreis])]
    
    • Was mich nach wie vor völlig verwirrt, ist die Tatsache, dass keinerlei Syntax auf eine Kontrollstruktur (hier wird ja wohl eine Schleife erzeugt) zu sehen ist.

    Das ist das geniale an JSONATA mit dem MAP Operator durchlÀufst Du automatisch ein Array. Und der Map Operator ist ein "Punkt" ;) .

    https://docs.jsonata.org/path-operators#-map

    Also wo Du in anderen Programmiersprachen ein ewiges Konstrukt mit for() und irgendwelchen Schleifen machen musst, langt es in JSONATA hinter einem Array einen Punkt zu machen und es wird durchlaufen. Ist ja an diesem Beispiel schön zu sehen:

    938320e7-2b0f-450c-9a93-d95b0b2037c3-image.png

    • Auch verstehe ich nicht, warum ich nicht in Anlehnung aus deiner Lösung zu 2. in 1. hĂ€tte kodieren können [ZĂ€hlerStĂ€nde.Bezug[$i].Wert * ZĂ€hlerStĂ€nde.Bezug[$i].Wert.Energiepreis]

    Wie gesagt ich hab es Dir ja nach der 2. Methode nun codiert, obwohl die $reduce Funktion einfacher ist, zumindest wenn Du die Objekte benennst, wie hier: https://try.jsonata.org/1lDqzoiKc

    So streng genommen um Lösung 1 und 2 kombinieren - muss man halt statt der eckigen runde Klammern verwenden:

    [$sum($.ZÀhlerStÀnde.Bezug#$Index.(($$.ZÀhlerStÀnde.Bezug[$Index+1].Wert-$$.ZÀhlerStÀnde.Bezug[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Bezug[$Index+1].Energiepreis)),
    $sum($.ZÀhlerStÀnde.Verkauf#$Index.(($$.ZÀhlerStÀnde.Verkauf[$Index+1].Wert-$$.ZÀhlerStÀnde.Verkauf[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Verkauf[$Index+1].Energiepreis)),
    $sum($.ZÀhlerStÀnde.Erzeugt#$Index.(($$.ZÀhlerStÀnde.Erzeugt[$Index+1].Wert-$$.ZÀhlerStÀnde.Erzeugt[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Erzeugt[$Index+1].Energiepreis))]
    

    https://try.jsonata.org/O15UAuwUB

    Im Prinzip kann man bei der 2. Methode auch runde Klammern verwenden. So sind 1 und 2 kombiniert. Manchmal liegts bei mir auch am Probieren, bis ich es verstehe. ;)

    $#$i.($$[$i+1]-$$[$i])
    

    funktioniert also genauso und ist im Prinzip - Methode 1 nur mit jeweiligem Bezug zum Root-Objekt

    Schau Dir bitte alle Beispiele und Links an, sonst wirst Du es nicht verstehen - hoffe nun aber Klarheit in die Sache gebraucht zu haben und habe nun nach der 2. Methode (Differenzsumme) auch Deine Werte kalkuliert.

    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.

    L 1 Antwort Letzte Antwort
    1
    • mickymM mickym

      @legro sagte in JSON Objekte in Liste:

      [@mickym sagte in JSON Objekte in Liste:

      @legro Du musst halt fragen, wenn Du was nicht verstehst. ..

      Dann will ich dich mal beim Wort nehmen.:slightly_smiling_face: WĂ€hrend du fĂŒr mich deine Lösungen zusammengebastelt hast, war ich nĂ€mlich nicht untĂ€tig.

      Nun manches kann ich erklĂ€ren, manches nicht. Manchmal muss ich auch ausprobieren und ich habe auch erst lange gebraucht bis ich es einigermaßen verstanden habe. Manches habe ich aber auch nicht verstanden. Was ich nicht verstehe, warum DU nicht meine endgĂŒltige Lösung nimmst, die funktioniert (nĂ€mlich die mit der $reduce Funktion). Die lĂ€sst Du bei den Fragen hier komplett außen vor.

      GrundsÀtzlich ist es so, dass JSONATA eine mÀchtige Bibliothek ist, aber kein Compiler und auch kein Interpreter, wie Du ihn bei klassischen Programmiertools findest. Deswegen kannst Du JSONATA in andere Tools einbinden, aber es hat kein GedÀchtnis. Deshalb schon mal ein Grundsatz, den Du Dir unbedingt merken musst.
      JSONATA arbeitet einfach die Anweisungen von links nach rechts (oder oben nach unten ab) und kann NICHT auf Ergebnisse zurĂŒckgreifen oder auf Strukturen zurĂŒckgreifen, die sich wĂ€hrend der Abarbeitung ergeben. Du hast lediglich den Anker $$, der immer auf das unverfĂ€lschte Eingangsobjekt zugreifen kann. $ hingegen enthĂ€lt immer den aktuellen Kontext, der NICHT fest ist sondern wo Du Dich gerade in einer Objekthierarchie befindest. Das musst Du im Hinterkopf haben und deshalb funktioniert das Kombinieren der beiden Methoden mit komplexen Objekten eben nicht und ich habe auf die $reduce Funktion zurĂŒck gegriffen.

      Nachdem wir ja die Aufgabenstellung zerlegt hatten in ..

      1. Summe der Produkte (Wert * Energiepreis) und ..
      2. Summe der Differenzen auf einanderfolgender ARRAY-Elemente, ..

      .. versuchte ich aus diesen beiden Gedanken die Lösung zusammenzubasteln. Leider mit viel wenig Erfolg.:confused:

      Die Differenzsumme mit diesen Mitteln zu erreichen, ist von der Syntax sehr kompliziert, weil Du IMMER den vollstÀndigen Pfad von der Wurzel aus referenzieren musst. Bei dem einfachen Array ging das - deswegen ist die $reduce Funktion wesentlich besser, da Du hier sowohl relativ als auch auf den Dich beziehenden Teil des Arrays Dich beziehen kannst.

      1. Produktsumme

      a4475b4a-e3cd-470e-b613-0ff7880a8357-image.png

      In diesem ARRAY galt es nun mittels der ersten Idee die Differenzsummen zu bilden, was mir nicht gelang, weil ich diese deine oben angegebene Lösung hierzu letztendlich wohl nicht tiefgreifend genug verstanden habe.

      Das ist eine geniale Möglichkeit von JSONATA, das funktioniert aber nur innerhalb von Objekten, die ein Index gerade durchlĂ€uft. DU kannst NICHT auf Elemente vorher und hinterher zurĂŒckgreifen, da JSONATA die nicht kennt. Zumindest nicht ohne Dich wieder auf das root-Objekt zu beziehen und nicht im aktuellen Kontext.

      1. Differenzsumme

      8f9f71bb-a9aa-4501-9bb1-79f9ffcea3f6-image.png

      Die Kodierung $#$i.[$$[$i+1]-$$[$i]] verstehe ich nur teilweise. Hier, was ich glaube, verstanden zu haben ..

      • $ steht fĂŒr einen relativen Pfad. (Am Anfang hĂ€tte also auch $$ stehen können.)

      Ja fĂŒr den aktuellen Kontext. Stimmt am Anfang entspricht $ = $$. Sobald Du aber ein Objekt darunter ansprichst z.Bsp. $.ZĂ€hlerstĂ€nde - enthĂ€lt nun die Variable $ das Array aber nicht mehr das gesamte Objekt wie $$.

      • $$ steht fĂŒr den absoluten (gesamten) Pfad von Beginn an.

      Einfach das GESAMTE Objekt oder Array (so wie es im linken Fenster steht)

      • $i steht fĂŒr eine - nennen wie sie mal - Hilfsvariable (und könnte auch ganz anders heißen).
        Ja - ich hÀtte es auch $index nennen können. Alle Variablen in JSONATA beginnen mit einem $
      • Aber was macht der Operator '#' genau? Pappt er (wie auch '@') den Pfad aus $ an die Variable $i und bezeichnet damit in der Ausgabe das ermittelte ARRAY-Element (Differenz).

      Er weist der darauffolgenden Variable den aktuellen Index, der beim Durchlaufen eines Arrays gebildet wird. Wenn Du Dein Array ZÀhlerstÀnde anschaust, dann hat es genau 3 Elemente, die kannst Du so referenzieren.

      https://try.jsonata.org/Car4x9aq9

      • [$$[$i+1]-$$[$i]] bildet die Differenz zweier aufeinander folgender Element, die durch die Indizes $i und $i+1 referenziert werden.

      Was ich mich frage ..

      • Könnte man nicht die beiden AnsĂ€tze 1. und 2. zu einer Lösung zusammenfĂŒgen? Wenn ja, wie?

      Ich habe es mal gemacht und habe den Ansatz 2 aus der Differensumme mit Deinem Objekt berechnet:
      https://try.jsonata.org/iqLO5ZyO9

      ac58db23-b00c-4531-b915-d6552897d35d-image.png

      [$sum($.ZÀhlerStÀnde.Bezug#$Index.[($$.ZÀhlerStÀnde.Bezug[$Index+1].Wert-$$.ZÀhlerStÀnde.Bezug[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Bezug[$Index+1].Energiepreis]),
      $sum($.ZÀhlerStÀnde.Verkauf#$Index.[($$.ZÀhlerStÀnde.Verkauf[$Index+1].Wert-$$.ZÀhlerStÀnde.Verkauf[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Verkauf[$Index+1].Energiepreis]),
      $sum($.ZÀhlerStÀnde.Erzeugt#$Index.[($$.ZÀhlerStÀnde.Erzeugt[$Index+1].Wert-$$.ZÀhlerStÀnde.Erzeugt[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Erzeugt[$Index+1].Energiepreis])]
      
      • Was mich nach wie vor völlig verwirrt, ist die Tatsache, dass keinerlei Syntax auf eine Kontrollstruktur (hier wird ja wohl eine Schleife erzeugt) zu sehen ist.

      Das ist das geniale an JSONATA mit dem MAP Operator durchlÀufst Du automatisch ein Array. Und der Map Operator ist ein "Punkt" ;) .

      https://docs.jsonata.org/path-operators#-map

      Also wo Du in anderen Programmiersprachen ein ewiges Konstrukt mit for() und irgendwelchen Schleifen machen musst, langt es in JSONATA hinter einem Array einen Punkt zu machen und es wird durchlaufen. Ist ja an diesem Beispiel schön zu sehen:

      938320e7-2b0f-450c-9a93-d95b0b2037c3-image.png

      • Auch verstehe ich nicht, warum ich nicht in Anlehnung aus deiner Lösung zu 2. in 1. hĂ€tte kodieren können [ZĂ€hlerStĂ€nde.Bezug[$i].Wert * ZĂ€hlerStĂ€nde.Bezug[$i].Wert.Energiepreis]

      Wie gesagt ich hab es Dir ja nach der 2. Methode nun codiert, obwohl die $reduce Funktion einfacher ist, zumindest wenn Du die Objekte benennst, wie hier: https://try.jsonata.org/1lDqzoiKc

      So streng genommen um Lösung 1 und 2 kombinieren - muss man halt statt der eckigen runde Klammern verwenden:

      [$sum($.ZÀhlerStÀnde.Bezug#$Index.(($$.ZÀhlerStÀnde.Bezug[$Index+1].Wert-$$.ZÀhlerStÀnde.Bezug[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Bezug[$Index+1].Energiepreis)),
      $sum($.ZÀhlerStÀnde.Verkauf#$Index.(($$.ZÀhlerStÀnde.Verkauf[$Index+1].Wert-$$.ZÀhlerStÀnde.Verkauf[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Verkauf[$Index+1].Energiepreis)),
      $sum($.ZÀhlerStÀnde.Erzeugt#$Index.(($$.ZÀhlerStÀnde.Erzeugt[$Index+1].Wert-$$.ZÀhlerStÀnde.Erzeugt[$Index].Wert)/1000 * $$.ZÀhlerStÀnde.Erzeugt[$Index+1].Energiepreis))]
      

      https://try.jsonata.org/O15UAuwUB

      Im Prinzip kann man bei der 2. Methode auch runde Klammern verwenden. So sind 1 und 2 kombiniert. Manchmal liegts bei mir auch am Probieren, bis ich es verstehe. ;)

      $#$i.($$[$i+1]-$$[$i])
      

      funktioniert also genauso und ist im Prinzip - Methode 1 nur mit jeweiligem Bezug zum Root-Objekt

      Schau Dir bitte alle Beispiele und Links an, sonst wirst Du es nicht verstehen - hoffe nun aber Klarheit in die Sache gebraucht zu haben und habe nun nach der 2. Methode (Differenzsumme) auch Deine Werte kalkuliert.

      L Offline
      L Offline
      legro
      schrieb am zuletzt editiert von legro
      #84

      @mickym

      Vielen Dank fĂŒr deine sehr ausfĂŒhrliche Antwort.

      Vorab ..

      Eines hast du leider vermutlich völlig falsch eingeschÀtzt; daher hier zur Klarstellung: Deine Lösung ist hervorragend, ich habe sie verstanden und selbstverstÀndlich ist sie bereits in Verwendung.:+1: :slightly_smiling_face:

      SelbstverstĂ€ndlich erwarte ich nicht, dass du mir sozusagen eine EinfĂŒhrung in die Verwendung von JSONata gibst. Meine Hoffnung war, dass du das eine oder andere zu erklĂ€ren weißt, was mir weiterhilft, mich tiefer in diese Thematik einfinden zu können. In der Tat verstehe ich mit deiner Hilfe jetzt einiges mehr und besser. Danke hierfĂŒr!

      Ich geb's zu. Ich gehöre zur vorletzten Generation und verstehe Informatik anders als sie heute offenbar kolportiert wird. Es gab eine klare Syntax, anhand derer man seine Konstrukte konstruieren/prĂŒfen konnte. So fehlt mir etwa in JSONata etwa eine Antwort auf die Frage, warum von meinen beiden Versuchen nur einer funktioniert. Sei's d'rum! Ich habe deine Lösung, die's tut. Das soll's gewesen sein.

      Ich bin derzeit dabei, in den AusdrĂŒcken ..

          {
            "Name": "Bezug",
            "StÀnde": [
              {
                "Datum": "0000-00-00",
                "Energiepreis": 0,
                "Wert": 0
              },
              {
                "Datum": "2023-01-01",
                "Energiepreis": 0.3963,
                "Wert": 468303
              },
              {
                "Datum": "2023-06-30",
                "Energiepreis": 0.3328,
                "Wert": 482512
              }
            ]
          },
      

      .. schreibend auf die Felder "Wert" zuzugreifen. Mit Blockly scheint das gar nicht so einfach zu sein.:disappointed:

      Nach ĂŒber vier Jahren Leidenszeit unter Qivicon/MSH vor den Telekomikern zu ioBroker geflĂŒchtet.
      Raspberry Pi 4 mit 8GB + ArgonOneM.2 + 120GB SSD + Coordinator CC26X2R1 + ioBroker + piVCCU3

      mickymM 2 Antworten Letzte Antwort
      0
      • L legro

        @mickym

        Vielen Dank fĂŒr deine sehr ausfĂŒhrliche Antwort.

        Vorab ..

        Eines hast du leider vermutlich völlig falsch eingeschÀtzt; daher hier zur Klarstellung: Deine Lösung ist hervorragend, ich habe sie verstanden und selbstverstÀndlich ist sie bereits in Verwendung.:+1: :slightly_smiling_face:

        SelbstverstĂ€ndlich erwarte ich nicht, dass du mir sozusagen eine EinfĂŒhrung in die Verwendung von JSONata gibst. Meine Hoffnung war, dass du das eine oder andere zu erklĂ€ren weißt, was mir weiterhilft, mich tiefer in diese Thematik einfinden zu können. In der Tat verstehe ich mit deiner Hilfe jetzt einiges mehr und besser. Danke hierfĂŒr!

        Ich geb's zu. Ich gehöre zur vorletzten Generation und verstehe Informatik anders als sie heute offenbar kolportiert wird. Es gab eine klare Syntax, anhand derer man seine Konstrukte konstruieren/prĂŒfen konnte. So fehlt mir etwa in JSONata etwa eine Antwort auf die Frage, warum von meinen beiden Versuchen nur einer funktioniert. Sei's d'rum! Ich habe deine Lösung, die's tut. Das soll's gewesen sein.

        Ich bin derzeit dabei, in den AusdrĂŒcken ..

            {
              "Name": "Bezug",
              "StÀnde": [
                {
                  "Datum": "0000-00-00",
                  "Energiepreis": 0,
                  "Wert": 0
                },
                {
                  "Datum": "2023-01-01",
                  "Energiepreis": 0.3963,
                  "Wert": 468303
                },
                {
                  "Datum": "2023-06-30",
                  "Energiepreis": 0.3328,
                  "Wert": 482512
                }
              ]
            },
        

        .. schreibend auf die Felder "Wert" zuzugreifen. Mit Blockly scheint das gar nicht so einfach zu sein.:disappointed:

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

        @legro sagte in JSON Objekte in Liste:

        SelbstverstĂ€ndlich erwarte ich nicht, dass du mir sozusagen eine EinfĂŒhrung in die Verwendung von JSONata gibst. Meine Hoffnung war, dass du das eine oder andere zu erklĂ€ren weißt, was mir weiterhilft, mich tiefer in diese Thematik einfinden zu können.

        Na ich hoffe, ich habe Deine Erwartungen nicht enttÀuscht. Ich habe doch alle Fragen beantwortet. Deswegen verstehe ich Deine Formulierung

        meine Hoffnung war, ....

        nicht. Was fehlt Dir denn an meinen ErklÀrungen?

        So fehlt mir etwa in JSONata etwa eine Antwort auf die Frage, warum von meinen beiden Versuchen nur einer funktioniert.

        Habe ich doch lang und breit erklÀrt. Was gefÀllt Dir an meinen ErklÀrungen nicht?

        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.

        L 1 Antwort Letzte Antwort
        0
        • L legro

          @mickym

          Vielen Dank fĂŒr deine sehr ausfĂŒhrliche Antwort.

          Vorab ..

          Eines hast du leider vermutlich völlig falsch eingeschÀtzt; daher hier zur Klarstellung: Deine Lösung ist hervorragend, ich habe sie verstanden und selbstverstÀndlich ist sie bereits in Verwendung.:+1: :slightly_smiling_face:

          SelbstverstĂ€ndlich erwarte ich nicht, dass du mir sozusagen eine EinfĂŒhrung in die Verwendung von JSONata gibst. Meine Hoffnung war, dass du das eine oder andere zu erklĂ€ren weißt, was mir weiterhilft, mich tiefer in diese Thematik einfinden zu können. In der Tat verstehe ich mit deiner Hilfe jetzt einiges mehr und besser. Danke hierfĂŒr!

          Ich geb's zu. Ich gehöre zur vorletzten Generation und verstehe Informatik anders als sie heute offenbar kolportiert wird. Es gab eine klare Syntax, anhand derer man seine Konstrukte konstruieren/prĂŒfen konnte. So fehlt mir etwa in JSONata etwa eine Antwort auf die Frage, warum von meinen beiden Versuchen nur einer funktioniert. Sei's d'rum! Ich habe deine Lösung, die's tut. Das soll's gewesen sein.

          Ich bin derzeit dabei, in den AusdrĂŒcken ..

              {
                "Name": "Bezug",
                "StÀnde": [
                  {
                    "Datum": "0000-00-00",
                    "Energiepreis": 0,
                    "Wert": 0
                  },
                  {
                    "Datum": "2023-01-01",
                    "Energiepreis": 0.3963,
                    "Wert": 468303
                  },
                  {
                    "Datum": "2023-06-30",
                    "Energiepreis": 0.3328,
                    "Wert": 482512
                  }
                ]
              },
          

          .. schreibend auf die Felder "Wert" zuzugreifen. Mit Blockly scheint das gar nicht so einfach zu sein.:disappointed:

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

          @legro Blockly kann nicht so einfach mit Objekten um gehen.

          Das ist ein Riesennachteil von Blockly weswegen ich es nicht mag, deswegen halt JSONATA verwenden und ich zeig Dir wie man das in Blockly integrieren kann.

          https://try.jsonata.org/r0XmLrKQc

          Hier siehst Du wie ich das letzte Arrayelement mit JSONATA auf das heutige Datum und auf 500000 verÀndere

          9b976c3f-d986-4cc9-b03b-6d4116f3e0e7-image.png

          Die JSONATA Anweisung zum Updaten ist die hier:

          $ ~> |ZÀhlerStÀnde[Name = "Bezug"].StÀnde[-1]|{"Datum": "2023-07-06","Wert": 500000}|
          

          Verwendet wird der Transform Operator: https://docs.jsonata.org/other-operators#-------transform

          das Referenzieren von Array-Elementen mit negativen Zahlen - kann ĂŒbrigens auch nur JSONATA und nicht Javascript:
          siehe hier:
          https://docs.jsonata.org/simple#navigating-json-arrays

          4c2f9f70-36e1-4c7f-b006-e204c21455b4-image.png

          Nun in Blockly musst Du halt den JSONATA Ausdruck konstruieren.

          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.

          1 Antwort Letzte Antwort
          0
          • mickymM mickym

            @legro sagte in JSON Objekte in Liste:

            SelbstverstĂ€ndlich erwarte ich nicht, dass du mir sozusagen eine EinfĂŒhrung in die Verwendung von JSONata gibst. Meine Hoffnung war, dass du das eine oder andere zu erklĂ€ren weißt, was mir weiterhilft, mich tiefer in diese Thematik einfinden zu können.

            Na ich hoffe, ich habe Deine Erwartungen nicht enttÀuscht. Ich habe doch alle Fragen beantwortet. Deswegen verstehe ich Deine Formulierung

            meine Hoffnung war, ....

            nicht. Was fehlt Dir denn an meinen ErklÀrungen?

            So fehlt mir etwa in JSONata etwa eine Antwort auf die Frage, warum von meinen beiden Versuchen nur einer funktioniert.

            Habe ich doch lang und breit erklÀrt. Was gefÀllt Dir an meinen ErklÀrungen nicht?

            L Offline
            L Offline
            legro
            schrieb am zuletzt editiert von legro
            #87

            @mickym

            Bitte nicht gleich jede Formulierung sozusagen als Kritik an deinen Antworten auslegen. Mein Klagen bezog sich auf die Dokumentation von JSONata und keinesfalls auf deine Antworten. Hier ging es mir um meine (noch) beschrÀnkte VerstÀndnisfÀhigkeiten.

            Es tut mir leid, wenn ich mich hier so unglĂŒcklich ausgedrĂŒckt habe.

            Übrigens, was du in deiner letzten Antwort schreibst, genau das versuche ich derzeit mit Blockly zu erreichen - leider (noch) mit viel wenig Erfolg.

            5e002136-729d-47a4-9583-9591d19ed318-image.png

            Die hier dargestellten Blöcke zeigen das Dilemma. Ich verstehe - als einer aus der vorletzten Generation - das Ganze folgendermaßen ..

            • Der Block "setzt Obj auf JSON nach Objekt .." allokiert im Speicher einen Datensatz als Abbild der JSON-Datenstruktur.
            • Mittels des zweiten Blocks "setze Wert auf Attribut ".." .." wird lesend auf die Speicherzelle des im Speicher allokierten Objektes zugegriffen. Dieser zweite Block bewirkt jedoch offenbar bloß eine neue Allokation des referierten Wertes aus dem Obj, indem eine Kopie in die Variable "Wert" geschrieben wird.

            Was ich jedoch benötige, wĂ€re eine Referenz (pointer) auf die Speicherzelle von "ZĂ€hlerStĂ€nde.0.Bezug.1.Wert" innerhalb der im Speicher allokierten Variable Obj. In den mir ĂŒber die Jahrzehnte bekannten Sprachen konnte ich die Variablen dezidiert einmal als reference (pointer) oder value (Kopie des Inhalts) kodieren.

            Ja, so denkt unsereiner, der noch aus der vorletzten Generation stammt.

            Jetzt hilft wohl nur noch JavaScript weiter!?

            Nach ĂŒber vier Jahren Leidenszeit unter Qivicon/MSH vor den Telekomikern zu ioBroker geflĂŒchtet.
            Raspberry Pi 4 mit 8GB + ArgonOneM.2 + 120GB SSD + Coordinator CC26X2R1 + ioBroker + piVCCU3

            mickymM 2 Antworten Letzte Antwort
            0
            • L legro

              @mickym

              Bitte nicht gleich jede Formulierung sozusagen als Kritik an deinen Antworten auslegen. Mein Klagen bezog sich auf die Dokumentation von JSONata und keinesfalls auf deine Antworten. Hier ging es mir um meine (noch) beschrÀnkte VerstÀndnisfÀhigkeiten.

              Es tut mir leid, wenn ich mich hier so unglĂŒcklich ausgedrĂŒckt habe.

              Übrigens, was du in deiner letzten Antwort schreibst, genau das versuche ich derzeit mit Blockly zu erreichen - leider (noch) mit viel wenig Erfolg.

              5e002136-729d-47a4-9583-9591d19ed318-image.png

              Die hier dargestellten Blöcke zeigen das Dilemma. Ich verstehe - als einer aus der vorletzten Generation - das Ganze folgendermaßen ..

              • Der Block "setzt Obj auf JSON nach Objekt .." allokiert im Speicher einen Datensatz als Abbild der JSON-Datenstruktur.
              • Mittels des zweiten Blocks "setze Wert auf Attribut ".." .." wird lesend auf die Speicherzelle des im Speicher allokierten Objektes zugegriffen. Dieser zweite Block bewirkt jedoch offenbar bloß eine neue Allokation des referierten Wertes aus dem Obj, indem eine Kopie in die Variable "Wert" geschrieben wird.

              Was ich jedoch benötige, wĂ€re eine Referenz (pointer) auf die Speicherzelle von "ZĂ€hlerStĂ€nde.0.Bezug.1.Wert" innerhalb der im Speicher allokierten Variable Obj. In den mir ĂŒber die Jahrzehnte bekannten Sprachen konnte ich die Variablen dezidiert einmal als reference (pointer) oder value (Kopie des Inhalts) kodieren.

              Ja, so denkt unsereiner, der noch aus der vorletzten Generation stammt.

              Jetzt hilft wohl nur noch JavaScript weiter!?

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

              @legro sagte in JSON Objekte in Liste:

              Übrigens, was du in deiner letzten Antwort schreibst, genau das versuche ich derzeit mit Blockly zu erreichen - leider (noch) mit viel wenig Erfolg.

              Ich arbeite daran. ;) - Leider ist Blockly auch bei Textersetzungen so was von schlecht, dass man da besser JSONATA zur Hilfe nimmt, wenn Du nicht JS Funktionen schreiben willst. Ich nehm aber fĂŒr Textersetzungen wohl auch besser eine Javascript Funktion. Du solltest wirklich auf NodeRed umsteigen - das Blockly ist fĂŒr solche Dinge einfach nur grottenschlecht. Aber ich machs. ;)

              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.

              1 Antwort Letzte Antwort
              0
              • L legro

                @mickym

                Bitte nicht gleich jede Formulierung sozusagen als Kritik an deinen Antworten auslegen. Mein Klagen bezog sich auf die Dokumentation von JSONata und keinesfalls auf deine Antworten. Hier ging es mir um meine (noch) beschrÀnkte VerstÀndnisfÀhigkeiten.

                Es tut mir leid, wenn ich mich hier so unglĂŒcklich ausgedrĂŒckt habe.

                Übrigens, was du in deiner letzten Antwort schreibst, genau das versuche ich derzeit mit Blockly zu erreichen - leider (noch) mit viel wenig Erfolg.

                5e002136-729d-47a4-9583-9591d19ed318-image.png

                Die hier dargestellten Blöcke zeigen das Dilemma. Ich verstehe - als einer aus der vorletzten Generation - das Ganze folgendermaßen ..

                • Der Block "setzt Obj auf JSON nach Objekt .." allokiert im Speicher einen Datensatz als Abbild der JSON-Datenstruktur.
                • Mittels des zweiten Blocks "setze Wert auf Attribut ".." .." wird lesend auf die Speicherzelle des im Speicher allokierten Objektes zugegriffen. Dieser zweite Block bewirkt jedoch offenbar bloß eine neue Allokation des referierten Wertes aus dem Obj, indem eine Kopie in die Variable "Wert" geschrieben wird.

                Was ich jedoch benötige, wĂ€re eine Referenz (pointer) auf die Speicherzelle von "ZĂ€hlerStĂ€nde.0.Bezug.1.Wert" innerhalb der im Speicher allokierten Variable Obj. In den mir ĂŒber die Jahrzehnte bekannten Sprachen konnte ich die Variablen dezidiert einmal als reference (pointer) oder value (Kopie des Inhalts) kodieren.

                Ja, so denkt unsereiner, der noch aus der vorletzten Generation stammt.

                Jetzt hilft wohl nur noch JavaScript weiter!?

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

                @legro sagte in JSON Objekte in Liste:

                Jetzt hilft wohl nur noch JavaScript weiter!?

                Jein - warte mal - ich nehm jetzt mal Javascript fĂŒr Textersetzungen - da selbst dass Blockly nicht kann. Ich kann Dir nur sagen, steig auf NodeRed um - ich bin auch nicht mehr der JĂŒngste aber Du wirst begeistert sein. So ich mach aber ein Blockly fĂŒr Dich.

                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.

                L 1 Antwort Letzte Antwort
                0
                • mickymM mickym

                  @legro sagte in JSON Objekte in Liste:

                  Jetzt hilft wohl nur noch JavaScript weiter!?

                  Jein - warte mal - ich nehm jetzt mal Javascript fĂŒr Textersetzungen - da selbst dass Blockly nicht kann. Ich kann Dir nur sagen, steig auf NodeRed um - ich bin auch nicht mehr der JĂŒngste aber Du wirst begeistert sein. So ich mach aber ein Blockly fĂŒr Dich.

                  L Offline
                  L Offline
                  legro
                  schrieb am zuletzt editiert von
                  #90

                  @mickym sagte in JSON Objekte in Liste:

                  @legro sagte in JSON Objekte in Liste:

                  Jetzt hilft wohl nur noch JavaScript weiter!?

                  Jein - warte mal - ich nehm jetzt mal Javascript fĂŒr Textersetzungen - da selbst dass Blockly nicht kann. Ich kann Dir nur sagen, steig auf NodeRed um - ich bin auch nicht mehr der JĂŒngste aber Du wirst begeistert sein. So ich mach aber ein Blockly fĂŒr Dich.

                  Auf NodeRed möchte ich nicht umsteigen mĂŒssen, obwohl ich nach meinen Erfahrungen mit deinen Hilfestellungen deinem Urteil absolut vertraue. Ich habe, seit ich im Ruhestand bin, eine Hausautomatisierung auf Basis von ioBroker aufgebaut. Wollte ich die auf NodeRed umstellen, ist zu befĂŒrchten, dass ich gar nicht mehr lange genug lebe, die FrĂŒchte dieser Arbeit genießen zu können.:sob:

                  Nach ĂŒber vier Jahren Leidenszeit unter Qivicon/MSH vor den Telekomikern zu ioBroker geflĂŒchtet.
                  Raspberry Pi 4 mit 8GB + ArgonOneM.2 + 120GB SSD + Coordinator CC26X2R1 + ioBroker + piVCCU3

                  mickymM 1 Antwort Letzte Antwort
                  0
                  • L legro

                    @mickym sagte in JSON Objekte in Liste:

                    @legro sagte in JSON Objekte in Liste:

                    Jetzt hilft wohl nur noch JavaScript weiter!?

                    Jein - warte mal - ich nehm jetzt mal Javascript fĂŒr Textersetzungen - da selbst dass Blockly nicht kann. Ich kann Dir nur sagen, steig auf NodeRed um - ich bin auch nicht mehr der JĂŒngste aber Du wirst begeistert sein. So ich mach aber ein Blockly fĂŒr Dich.

                    Auf NodeRed möchte ich nicht umsteigen mĂŒssen, obwohl ich nach meinen Erfahrungen mit deinen Hilfestellungen deinem Urteil absolut vertraue. Ich habe, seit ich im Ruhestand bin, eine Hausautomatisierung auf Basis von ioBroker aufgebaut. Wollte ich die auf NodeRed umstellen, ist zu befĂŒrchten, dass ich gar nicht mehr lange genug lebe, die FrĂŒchte dieser Arbeit genießen zu können.:sob:

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

                    @legro sagte in JSON Objekte in Liste:

                    @mickym sagte in JSON Objekte in Liste:

                    @legro sagte in JSON Objekte in Liste:

                    Jetzt hilft wohl nur noch JavaScript weiter!?

                    Jein - warte mal - ich nehm jetzt mal Javascript fĂŒr Textersetzungen - da selbst dass Blockly nicht kann. Ich kann Dir nur sagen, steig auf NodeRed um - ich bin auch nicht mehr der JĂŒngste aber Du wirst begeistert sein. So ich mach aber ein Blockly fĂŒr Dich.

                    Auf NodeRed möchte ich nicht umsteigen mĂŒssen, obwohl ich nach meinen Erfahrungen mit deinen Hilfestellungen deinem Urteil absolut vertraue. Ich habe, seit ich im Ruhestand bin, eine Hausautomatisierung auf Basis von ioBroker aufgebaut. Wollte ich die auf NodeRed umstellen, ist zu befĂŒrchten, dass ich gar nicht mehr lange genug lebe, die FrĂŒchte dieser Arbeit genießen zu können.:sob:

                    Nein das stimmt nicht - weil Du ja beides parallel betreiben kannst. Ich meine ja nicht das iobroker System wegschmeissen, sondern nur NodeRed (als Adapter hier im iobroker) anstelle Blockly als Logikmaschine zu verwenden. Du kannst das zum Beispiel auch jetzt machen - ohne deine bisherigen Blocklies anzufassen.
                    Ausserdem kannst Du selbst entscheiden, ob Du dann spÀter einzelne Blocklies in NodeRed konverierst.

                    Nun habe ich aber Dein Blockly fertig zusammen mit JSONATA. ;)

                    8feb6b5f-5521-4e9b-bce5-9b6ff1c692b8-image.png

                    Weitere ErklÀrungen folgen gleich.

                    Im neuen Datum und im neuen Wert als Variable einfach das halt reingeben was Du aus Deinen Datenpunkten/Adaptern holst.

                    Den JSONATA Ausdruck zum Aktualisieren des letzten Objektes unter Bezug hatte ich Dir ja gepostet. Ich habe nur die beiden Werte zum aktualisieren - ein Dummytext verwendet.

                    $ ~> |ZÀhlerStÀnde[Name = "Bezug"].StÀnde[-1]|{"Datum": "-neuesDatum-","Wert": -neuerWert-}|
                    

                    Diese beiden Texte -neues Datum- und -neuerWert- ersetze ich nun durch die Variablen "neues Datum" und "neuer Wert".
                    Da dieses Blockly in seinen Textbausteinen (zumindest hab ich nichts gefunden) kein Suchen und Ersetzen hat habe ich eine JS Funktion implementiert.

                    a7e8492b-b474-4cd4-99ab-4f4ed4f6e221-image.png

                    Diese nimmt 3 Parameter auf.

                    1. Den Text der geÀndert werden soll
                    2. Welche Stelle geÀndert werden soll
                    3. Mit was ersetzt wird.

                    Der dahinterstehende JS Code - ist banal. ;) - auch wenn ich nicht weiß warum man hier auf Text2 referenzieren muss. ;)

                    return Text2.replace(Suche,ErsetzeMit);
                    

                    Somit wird also das neue Datum

                    b728603a-026e-47b4-b4f7-aa1ba7e65491-image.png

                    im Ausdruck durch den Inhalt der Variable ersetzt.

                    bei dem neuen Wert analog.

                    Im Debug siehst Du das dann:
                    4d507dd2-5957-4e28-8b86-c68c0478ad5f-image.png

                    Mit dem JSONATA Ausdruck aktualisierst Du dann Dein Objekt.

                    69ff1742-e275-4042-8275-076da8947eb0-image.png

                    Somit wird aus:

                    6610e653-4da0-4411-af6b-8718e432d43a-image.png

                    Korrespondierende Stellen sind farblich Àhnlich markiert.

                    Hier zum Import das gesamte Blockly:

                    <xml xmlns="https://developers.google.com/blockly/xml">
                     <variables>
                       <variable id="Ecm2OgfZ8GI=K~naW9FW">Text</variable>
                       <variable id="uQ6ik6Rp*f%TY48I.?KS">Suche</variable>
                       <variable id="1A,HmaVf6-tm#bCww00G">ErsetzeMit</variable>
                       <variable id="NWR;`_N@3a:sTiBKQkne">Objekt</variable>
                       <variable id="9u8X/Eqh]Ug6kT2?)@]y">neues Datum</variable>
                       <variable id="b5?do~@03)oSd?w4b/=O">neuer Wert</variable>
                       <variable id="GwCfcA.)Sm4A[NF{ep7K">JSONATA</variable>
                     </variables>
                     <block type="procedures_defcustomreturn" id="%8$N60_9!!Uf5a$$-#AX" x="-1138" y="-412">
                       <mutation statements="false">
                         <arg name="Text" varid="Ecm2OgfZ8GI=K~naW9FW"></arg>
                         <arg name="Suche" varid="uQ6ik6Rp*f%TY48I.?KS"></arg>
                         <arg name="ErsetzeMit" varid="1A,HmaVf6-tm#bCww00G"></arg>
                       </mutation>
                       <field name="NAME">Textersetzen</field>
                       <field name="SCRIPT">cmV0dXJuIFRleHQyLnJlcGxhY2UoU3VjaGUsRXJzZXR6ZU1pdCk7</field>
                       <comment pinned="false" h="80" w="160">Beschreibe diese Funktion 
</comment>
                     </block>
                     <block type="variables_set" id="M@F*zUMa;{#yJo2.2goG" x="-1137" y="-337">
                       <field name="VAR" id="NWR;`_N@3a:sTiBKQkne">Objekt</field>
                       <value name="VALUE">
                         <block type="convert_json2object" id="wV#~g_#qRM}fhgD[;waT">
                           <value name="VALUE">
                             <block type="text" id="7@h4[@Y-M.M.tsLuCU56">
                               <field name="TEXT">{   "ZÀhlerStÀnde": [     {       "Name": "Bezug",       "StÀnde": [         {           "Datum": "0000-00-00",           "Energiepreis": 0,           "Wert": 0         },         {           "Datum": "2023-01-01",           "Energiepreis": 0.3963,           "Wert": 468303         },         {           "Datum": "2023-06-30",           "Energiepreis": 0.3328,           "Wert": 482512         }       ]     },     {       "Name": "Verkauf",       "StÀnde": [         {           "Datum": "0000-00-00",           "Energiepreis": 0,           "Wert": 0         },         {           "Datum": "2023-01-01",           "Energiepreis": 0.082,           "Wert": 0         },         {           "Datum": "2023-06-30",           "Energiepreis": 0.082,           "Wert": 0         }       ]     },     {       "Name": "Erzeugt",       "StÀnde": [         {           "Datum": "0000-00-00",           "Energiepreis": 0,           "Wert": 0         },         {           "Datum": "2023-01-01",           "Energiepreis": 0.3963,           "Wert": 2510191         },         {           "Datum": "2023-06-30",           "Energiepreis": 0.3328,           "Wert": 2597930         }       ]     }   ] }</field>
                             </block>
                           </value>
                         </block>
                       </value>
                       <next>
                         <block type="debug" id="9S+u#Vzo/zuptK|}o,?9">
                           <field name="Severity">log</field>
                           <value name="TEXT">
                             <shadow type="text" id="COg%Nwdd92sEj=QP[Lt)">
                               <field name="TEXT">test</field>
                             </shadow>
                             <block type="variables_get" id="N=A4,QQsE8/8~[BL])Xc">
                               <field name="VAR" id="NWR;`_N@3a:sTiBKQkne">Objekt</field>
                             </block>
                           </value>
                           <next>
                             <block type="variables_set" id="k.1XtKn$8B-y3gL%:f.-">
                               <field name="VAR" id="9u8X/Eqh]Ug6kT2?)@]y">neues Datum</field>
                               <value name="VALUE">
                                 <block type="text" id="5@NN=W}#{Jh6M-|kUH^[">
                                   <field name="TEXT">2023-07-06</field>
                                 </block>
                               </value>
                               <next>
                                 <block type="variables_set" id="l4S9d+HMDqUB1T/,OxPm">
                                   <field name="VAR" id="b5?do~@03)oSd?w4b/=O">neuer Wert</field>
                                   <value name="VALUE">
                                     <block type="text" id="l.okZ;;D[ZLfm/gi@6hS">
                                       <field name="TEXT">520000</field>
                                     </block>
                                   </value>
                                   <next>
                                     <block type="variables_set" id="QyDxg]4E#TKf|eK6:VER">
                                       <field name="VAR" id="GwCfcA.)Sm4A[NF{ep7K">JSONATA</field>
                                       <value name="VALUE">
                                         <block type="text" id="sKl-kQyq({+ymSEB,jE+">
                                           <field name="TEXT">$ ~&gt; |ZÀhlerStÀnde[Name = "Bezug"].StÀnde[-1]|{"Datum": "-neuesDatum-","Wert": -neuerWert-}|</field>
                                         </block>
                                       </value>
                                       <next>
                                         <block type="debug" id="!_829~nwqQFuY32{MH~:">
                                           <field name="Severity">log</field>
                                           <value name="TEXT">
                                             <shadow type="text" id="{eQ7UY*O`Z-67f0;Y[yV">
                                               <field name="TEXT">test</field>
                                             </shadow>
                                             <block type="variables_get" id="VnIOH%}+/fC-S6S[:2`C">
                                               <field name="VAR" id="GwCfcA.)Sm4A[NF{ep7K">JSONATA</field>
                                             </block>
                                           </value>
                                           <next>
                                             <block type="variables_set" id="QHrof-UDHIQ_;fIhHaW%">
                                               <field name="VAR" id="GwCfcA.)Sm4A[NF{ep7K">JSONATA</field>
                                               <value name="VALUE">
                                                 <block type="procedures_callcustomreturn" id="vK7EZ646K9j}n;v%MKno">
                                                   <mutation name="Textersetzen">
                                                     <arg name="Text"></arg>
                                                     <arg name="Suche"></arg>
                                                     <arg name="ErsetzeMit"></arg>
                                                   </mutation>
                                                   <value name="ARG0">
                                                     <block type="variables_get" id="9ud0X|_*(eIlG,Cw;XR?">
                                                       <field name="VAR" id="GwCfcA.)Sm4A[NF{ep7K">JSONATA</field>
                                                     </block>
                                                   </value>
                                                   <value name="ARG1">
                                                     <block type="text" id="h)@hKKIXRZPv%7i-%FP+">
                                                       <field name="TEXT">-neuesDatum-</field>
                                                     </block>
                                                   </value>
                                                   <value name="ARG2">
                                                     <block type="variables_get" id="24j_WUdw2qM]{,!T:A#I">
                                                       <field name="VAR" id="9u8X/Eqh]Ug6kT2?)@]y">neues Datum</field>
                                                     </block>
                                                   </value>
                                                 </block>
                                               </value>
                                               <next>
                                                 <block type="variables_set" id="h^_Nx6jY^iKU2cxl{z*D">
                                                   <field name="VAR" id="GwCfcA.)Sm4A[NF{ep7K">JSONATA</field>
                                                   <value name="VALUE">
                                                     <block type="procedures_callcustomreturn" id="^.zPIF+|ECBT!VyZh|:W">
                                                       <mutation name="Textersetzen">
                                                         <arg name="Text"></arg>
                                                         <arg name="Suche"></arg>
                                                         <arg name="ErsetzeMit"></arg>
                                                       </mutation>
                                                       <value name="ARG0">
                                                         <block type="variables_get" id="0H[@K-TQ+j:2?YXLuFsY">
                                                           <field name="VAR" id="GwCfcA.)Sm4A[NF{ep7K">JSONATA</field>
                                                         </block>
                                                       </value>
                                                       <value name="ARG1">
                                                         <block type="text" id="J]uql_B_Ah99|[?Kqg`]">
                                                           <field name="TEXT">-neuerWert-</field>
                                                         </block>
                                                       </value>
                                                       <value name="ARG2">
                                                         <block type="variables_get" id="EzQAy(X?|J.wwiIO~0Ty">
                                                           <field name="VAR" id="b5?do~@03)oSd?w4b/=O">neuer Wert</field>
                                                         </block>
                                                       </value>
                                                     </block>
                                                   </value>
                                                   <next>
                                                     <block type="debug" id="8q-q]*bOU4}Y,_iXC?g8">
                                                       <field name="Severity">log</field>
                                                       <value name="TEXT">
                                                         <shadow type="text" id="z{,C85)D6K=@u2QbXPwa">
                                                           <field name="TEXT">test</field>
                                                         </shadow>
                                                         <block type="variables_get" id="-O~0B:dy$tuF_D~jyC%%">
                                                           <field name="VAR" id="GwCfcA.)Sm4A[NF{ep7K">JSONATA</field>
                                                         </block>
                                                       </value>
                                                       <next>
                                                         <block type="debug" id="^5#in-UU}%!K~KPOKHz_">
                                                           <field name="Severity">log</field>
                                                           <value name="TEXT">
                                                             <shadow type="text" id="-,TGC$b5|aHgxT-/9J]`">
                                                               <field name="TEXT">test</field>
                                                             </shadow>
                                                             <block type="convert_jsonata" id="lJ3pgV,d!Gi]8s,TMKUf">
                                                               <value name="EXPRESSION">
                                                                 <shadow type="text" id="$?E[/Hc*GGc|PsLH./zl">
                                                                   <field name="TEXT">$ ~&gt; |ZÀhlerStÀnde[Name = "Bezug"].StÀnde[-1]|{"Datum": "2023-07-06","Wert": 500000}|</field>
                                                                 </shadow>
                                                                 <block type="variables_get" id="@bh(Gu.?bybsmVE,%;NA">
                                                                   <field name="VAR" id="GwCfcA.)Sm4A[NF{ep7K">JSONATA</field>
                                                                 </block>
                                                               </value>
                                                               <value name="TARGET">
                                                                 <block type="variables_get" id="$EtNHY[c50V=?^FK.SM-">
                                                                   <field name="VAR" id="NWR;`_N@3a:sTiBKQkne">Objekt</field>
                                                                 </block>
                                                               </value>
                                                             </block>
                                                           </value>
                                                         </block>
                                                       </next>
                                                     </block>
                                                   </next>
                                                 </block>
                                               </next>
                                             </block>
                                           </next>
                                         </block>
                                       </next>
                                     </block>
                                   </next>
                                 </block>
                               </next>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                    </xml>
                    

                    Aber wie gesagt mit dem Blockly gebe ich hier nur ein Gastspiel. ;) - Und nochmal man muss nicht auf NodeRed umsteigen, kann es aber zusÀtzlich benutzen. ;)

                    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.

                    1 Antwort Letzte Antwort
                    1
                    • L Offline
                      L Offline
                      legro
                      schrieb am zuletzt editiert von
                      #92

                      @mickym

                      Aber wie gesagt mit dem Blockly gebe ich hier nur ein Gastspiel. 😉 - Und nochmal man muss nicht auf NodeRed umsteigen, kann es aber zusĂ€tzlich benutzen. 😉

                      Aber was fĂŒr ein beeindruckendes Gastspiel! :+1:

                      Ich muss erkennen: Meine Ressourcen geben das nicht (mehr) her. JSONata ist (zumindest derzeit noch) eine Nummer zu groß. Außer mich bei dir fĂŒr diese tolle Lösungen zu bedanken, kann ich kaum etwas dazu beitragen.:confounded:

                      Vielen Dank fĂŒr deine großartige UnterstĂŒtzung.

                      Nach ĂŒber vier Jahren Leidenszeit unter Qivicon/MSH vor den Telekomikern zu ioBroker geflĂŒchtet.
                      Raspberry Pi 4 mit 8GB + ArgonOneM.2 + 120GB SSD + Coordinator CC26X2R1 + ioBroker + piVCCU3

                      mickymM 1 Antwort Letzte Antwort
                      0
                      • L legro

                        @mickym

                        Aber wie gesagt mit dem Blockly gebe ich hier nur ein Gastspiel. 😉 - Und nochmal man muss nicht auf NodeRed umsteigen, kann es aber zusĂ€tzlich benutzen. 😉

                        Aber was fĂŒr ein beeindruckendes Gastspiel! :+1:

                        Ich muss erkennen: Meine Ressourcen geben das nicht (mehr) her. JSONata ist (zumindest derzeit noch) eine Nummer zu groß. Außer mich bei dir fĂŒr diese tolle Lösungen zu bedanken, kann ich kaum etwas dazu beitragen.:confounded:

                        Vielen Dank fĂŒr deine großartige UnterstĂŒtzung.

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

                        @legro Ich helfe ja gerne - außerdem macht mir sowas Spaß an Lösungen zu tĂŒfteln und das hĂ€lt meinen Geist noch etwas wach. :grin:

                        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.

                        L 1 Antwort Letzte Antwort
                        0
                        • mickymM mickym

                          @legro Ich helfe ja gerne - außerdem macht mir sowas Spaß an Lösungen zu tĂŒfteln und das hĂ€lt meinen Geist noch etwas wach. :grin:

                          L Offline
                          L Offline
                          legro
                          schrieb am zuletzt editiert von
                          #94

                          @mickym sagte in JSON Objekte in Liste:

                          @legro Ich helfe ja gerne - außerdem macht mir sowas Spaß an Lösungen zu tĂŒfteln und das hĂ€lt meinen Geist noch etwas wach. :grin:

                          Ja, das merkt man. Mein Problem ist zunehmend, dass ich mir nur noch schlecht etwas merken, aber vergessen kann ich dafĂŒr gut.:cry: Wer weiß, wie‘s ohne dieses Hobby aussĂ€he.:face_with_rolling_eyes:

                          Nach ĂŒber vier Jahren Leidenszeit unter Qivicon/MSH vor den Telekomikern zu ioBroker geflĂŒchtet.
                          Raspberry Pi 4 mit 8GB + ArgonOneM.2 + 120GB SSD + Coordinator CC26X2R1 + ioBroker + piVCCU3

                          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

                          498

                          Online

                          32.4k

                          Benutzer

                          81.5k

                          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