Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Visualisierung mit Node Red erstellen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Visualisierung mit Node Red erstellen

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @Damrak2022 last edited by mickym

      @damrak2022 sagte in Visualisierung mit Node Red erstellen:

      @mickym Lass uns/mich das mal aufdröseln.
      Okay die Abfrage nach dem gelben Zimmer ist klar. Und mit dem "." hast Du einfach ein Mapping gemacht.
      Der Punkt folgt doch aber auf ein Array. Und das bedeutet das er den gesamten Code nach dem Wert von "Preis" durchsucht. Oder ist das durch die Begrenzung auf "gelbes Zimmer" nur auf diesen reduziert worden?

      Das bringt dich Durcheinander.

      1. Ein Mapping mit einem Punkt gibt es nur bei einem Array!!!!

      aca5095b-bd32-49ae-9faa-f26579793584-image.png

      fb3b1055-20cb-46e2-8c12-b65cd35a6dfe-image.png

      1. Ein Punkt nach einem Objekt - greift auf die Eigenschaft eines Objektes zu.

      https://docs.jsonata.org/simple

      ca533b57-5a63-463d-84e4-4b7515f28aeb-image.png

      Der Punkt hat also unterschiedliche Bedeutung, je nachdem ob vor dem Punkt ein Array oder ein Objekt steht.

      Deswegen wusste ich eigentlich nicht mehr wie ich Dir noch helfen sollte:

      1. Deine payload = Objekt
      2. Deine Abfrage payload.Zimmer[Zimmername="gelbes Zimmer"] = Objekt

      Auf eine Eigenschaft eines Objektes greift man mit Punkt und Eigenschaft zu

      also

      Objekt.Eigenschaft
      

      oder

      payload.Nachname
      

      oder

      payload.Zimmer[Zimmername="gelbes Zimmer"].Preis
      

      Kannst Du mir vielleicht einen Tipp geben, wie ich das besser erklären kann?

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

        @mickym Nein, das ist perfekt. Ich hatte das mit dem Mapping halt noch von gestern im Kopf. Alles gut

        mickym 2 Replies Last reply Reply Quote 0
        • mickym
          mickym Most Active @Damrak2022 last edited by mickym

          @damrak2022 sagte in Visualisierung mit Node Red erstellen:

          @mickym Nein, das ist perfekt. Ich hatte das mit dem Mapping halt noch von gestern im Kopf. Alles gut

          Ist ja gut - das mapping geht halt nur, wenn Du links vom Punkt ein Array hast. Deswegen bin ich auf den Datentypen rumgeritten.

          Ich will Dir die nochmal die Genialität von JSONATA zeigen. Mit diesem einfachen Ausdruck hast Du nun die Nummer des gelben Zimmers rausbekommen:

          payload.Zimmer[Zimmername="gelbes Zimmer"].Preis
          

          cd5ab1b1-50b6-4451-80b7-8175a26a9a5a-image.png

          Das ist kein Programmieren. Programmieren wäre es wenn Du es in Javascript machst - dafür gibts Schleifen mit in und off.

          // über Index (=key) aus Array mit "in" iterieren
          for (var i in msg.payload.Zimmer) {
              if (msg.payload.Zimmer[i].Zimmername === "gelbes Zimmer") { 
                  msg.payload = msg.payload.Zimmer[i].Preis;
                  return msg;
              }
          }
          

          mit in greifst Du über den Array Index auf die Elemente zu und musst dann jedes Objekt durchsuchen

          Mit "of" kannst Du direkt über die Objekte im Javascript iterieren. Die musst Du aber auch alle untersuchen.

          // über Objekte aus Array mit "of" iterieren
          for (var obj of msg.payload.Zimmer) {
              if (obj.Zimmername === "gelbes Zimmer") { 
                  msg.payload = obj.Preis;
                  return msg;
              }
          }
          

          Beides habe ich dir mal mit den beiden Function Nodes hier demonstriert.

          1477677d-7e5a-4394-900b-e1070220a0bb-image.png

          [
             {
                 "id": "4c7347a2065f3ac9",
                 "type": "function",
                 "z": "289f539dcc33814e",
                 "name": "Preis von Zimmer 3 (über Index(key))",
                 "func": "// über Index (=key) aus Array mit \"in\" iterieren\nfor (var i in msg.payload.Zimmer) {\n    if (msg.payload.Zimmer[i].Zimmername === \"gelbes Zimmer\") { \n        msg.payload = msg.payload.Zimmer[i].Preis;\n        return msg;\n    }\n}\n",
                 "outputs": 1,
                 "noerr": 0,
                 "initialize": "",
                 "finalize": "",
                 "libs": [],
                 "x": 4010,
                 "y": 2580,
                 "wires": [
                     [
                         "19771e2a7e62b7c5"
                     ]
                 ]
             },
             {
                 "id": "19771e2a7e62b7c5",
                 "type": "debug",
                 "z": "289f539dcc33814e",
                 "name": "Eigenschaft eines best. Zimmers",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 4370,
                 "y": 2580,
                 "wires": []
             },
             {
                 "id": "579e800d0859436c",
                 "type": "function",
                 "z": "289f539dcc33814e",
                 "name": "Preis von Zimmer 3 (direkt über Objekt)",
                 "func": "// über Objekte aus Array mit \"of\" iterieren\nfor (var obj of msg.payload.Zimmer) {\n    if (obj.Zimmername === \"gelbes Zimmer\") { \n        msg.payload = obj.Preis;\n        return msg;\n    }\n}\n",
                 "outputs": 1,
                 "noerr": 0,
                 "initialize": "",
                 "finalize": "",
                 "libs": [],
                 "x": 4020,
                 "y": 2620,
                 "wires": [
                     [
                         "d6caf224211c3e44"
                     ]
                 ]
             },
             {
                 "id": "d6caf224211c3e44",
                 "type": "debug",
                 "z": "289f539dcc33814e",
                 "name": "Eigenschaft eines best. Zimmers",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 4370,
                 "y": 2620,
                 "wires": []
             }
          ]
          

          Und für alle Leute - die lieber Puzzlen wollen ist es genauso umständlich, wenn sie nicht die JSONATA Bibliothek, die auch in Blockly vorhanden ist, nutzen.

          6bc8883e-4744-4dea-be25-28003fa26e3a-image.png

          Schau mal wie einfach dagegen Deine Zeile ist.

          Leider sind auch die meisten Blockly-Fans nicht in der Lage die JSONATA Bibliothek zu nutzen, obwohl sie es könnten:

          58389a81-cc09-4176-a82b-ffecedc8fd50-image.png

          Also oben umständlich programmiert, unten mit Deiner JSONATA Zeile. Das $ entspricht hier dem obersten Objekt, was in NodeRed ja das Nachrichtenobjekt ist.

          Verstehst Du langsam die Zusammenhänge?

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

            @damrak2022 sagte in Visualisierung mit Node Red erstellen:

            @mickym Nein, das ist perfekt. Ich hatte das mit dem Mapping halt noch von gestern im Kopf. Alles gut

            Das kommt schon noch zur Anwendung - aber dafür muss halt links neben dem Punkt ein Array stehen. Können wir gleich anschliessend machen. 😉

            Vorher machen wir aber noch umgekehrte Übung.

            Du hast ja nun den Preis des gelben Zimmers ausgegeben und das waren 189 (€).

            3 Wochen später weiß ich zwar, dass wir zwar Zimmer zu 189 (€) hatten, aber ich weiß nicht mehr welches. Könntest du mir also bitte den Namen des Zimmers abfragen, das 189 (€) kostet?

            Das wäre supernett von Dir. Vielen Dank.

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

              @mickym Das kann ja kaum stimmen
              Bildschirm­foto 2023-02-07 um 01.18.09.png

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

                @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                @mickym Das kann ja kaum stimmen
                Bildschirm­foto 2023-02-07 um 01.18.09.png

                Na was kommt denn dabei raus? - ich sehe nur das Code-Fenster-

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

                  @mickym Bildschirm­foto 2023-02-07 um 01.19.53.png

                  mickym 2 Replies Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @Damrak2022 last edited by

                    @damrak2022 Na das ist ja kaum sinnvoll - Du fragst den Zimmernamen ab, erhälst ein Objekt und gibst wieder Zimmernamen aus.

                    Du warst vorher in der Lage aus dem Objekt des gelben Zimmers den Preis und die Nummer zu extrahieren.

                    Nun weiß ich 3 Wochen später nicht mehr welches Zimmer das war:

                    3 Wochen später weiß ich zwar, dass wir zwar Zimmer zu 189 (€) hatten, aber ich weiß nicht mehr welches. Könntest du mir also bitte den Namen des Zimmers abfragen, das 189 (€) kostet?

                    Das wäre supernett von Dir. Vielen Dank.

                    Also ich würde gerne wissen, welches Zimmer 189 € kostet.

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

                      @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                      @mickym Bildschirm­foto 2023-02-07 um 01.19.53.png

                      Die Ausgabe von Zimmername ist ja richtig - aber der Filter muss ja der Preis sein, denn der Name ist mir ja entfallen und den will ich ja wissen. 😉

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

                        @mickym Ja, ich hatte auch das versucht, aber so geht es nicht, weil ich wieder irgendwas nicht umsetzen kann.
                        Bildschirm­foto 2023-02-07 um 01.28.20.png

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

                          @damrak2022 Tja 2 Fehler. 😉

                          Ich hab Dir schon mal gesagt, dass Du die Eigenschaftsnamen bei der Abfrage nicht in Gänsefüsschen machen darfst.

                          Hast Du hier nicht gemacht

                          @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                          @mickym Bildschirm­foto 2023-02-07 um 01.19.53.png

                          Warum jetzt???????????????????????????????????????

                          2 - nach was für einem Datentyp suchen wir denn? - Was ist 189 für ein Datentyp?

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

                            @mickym Einer Eigenschaft eines Objekts

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

                              @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                              @mickym Einer Eigenschaft eines Objekts

                              Ich habe Dich nach Datentyp gefragt.

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

                                @mickym Wir suchen nach einem String in einem Objekt

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

                                  @damrak2022 Welchen Datentyp hat der Preis?

                                  1d9d9f66-8fd0-4bd9-8220-f77bae6ad2a9-image.png

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

                                    @mickym "Preis" ist ein String,

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

                                      @mickym Bildschirm­foto 2023-02-07 um 01.44.36.png

                                      Ich muss mir das merken das bei Abfragen keine Anführungszeichen verwendet werden dürfen

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

                                        @damrak2022 Das ist der Eigenschaftsname - aber welcher Datentyp hat Preis - der Datentyp einer Eigenschaft wird durch dessen Wert bestimmt.

                                        Die payload war ein Objekt - weil der Wert mit einer geschweiften Klammer beginnt

                                        Der Datentyp des Preises ist eine Zahl oder Number - da 189 nur aus Zahlen besteht und keine Anführungszeichen drum rum sind.

                                        Also merke: Der Datentyp einer Eigenschaft richtet sich nach dem Datentyp des Wertes.

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

                                          @mickym Ja der eigentliche Preis also die 189 ist number, soweit klar.

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

                                            @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                                            Ich muss mir das merken das bei Abfragen keine Anführungszeichen verwendet werden dürfen

                                            Ja das waren die ersten falschen Anführungszeichen

                                            und

                                            NEIN, der Datentyp des Preises ist kein String. Der Datentyp des Preises ist eine Zahl, weil der Wert 189 kein String sondern eine Zahl ist.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            404
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

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