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.
    • Damrak2022
      Damrak2022 @mickym last edited by Damrak2022

      @mickym Number - also der Preis

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

        @mickym sagte in Visualisierung mit Node Red erstellen:

        @damrak2022 sagte in Visualisierung mit Node Red erstellen:

        @damrak2022 Was ist die Payload für ein Datentyp - Hm, unangenehme Frage:

        Nein ganz einfach - was steht denn hinter dem Doppelpunkt?

        NEIN wo siehst Du eine Number

        be57a10f-e339-4471-87bf-dbc2ca8f7630-image.png

        bei mir steht da keine Zahl.

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

          @mickym Achso da, ja da kommt eine geschweifte Klammer

          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 Achso da, ja da kommt eine geschweifte Klammer

            Also was ist die payload für ein Datentyp`? 😉

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

              @mickym Objekt
              Diese Dinge sehe ich mittlerweile auch, aber ich habe Probleme sie richtig anzuwenden

              mickym 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 Objekt

                Sehr gut - also die payload ist ein Objekt und aus Deiner Abfrage kam auch ein Objekt raus - also beides mal ein Objekt.

                Den Nachnamen der payload hast Du über Objekt.Nachname herausbekommen - also payload.Nachname.

                Wenn die payload eine Eigenschaft Preis hätte (hat sie ja nicht), dann würdest Du diese Eigenschaft Preis mit payload.Preis extrahieren.

                Wie könnte man nun die Eigenschaft Preis aus Deinem "abgefragten" Objekt herausbekommen?

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

                  @mickym Erstmal eine Zwischenfrage: Bleibt der Code so bestehen und wird nur erweitert?

                  mickym 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 Erstmal eine Zwischenfrage: Bleibt der Code so bestehen und wird nur erweitert?

                    Na ich hab Dir ja den Wink mit dem Zaunpfahl in dem unteren Tipp gegeben - also nur erweitert. Ansonsten - falls Du es immer noch nicht schaffst - gibts im nächsten Post die Lösung und Du erklärst mir, warum Du darauf nicht gekommen bist.
                    Einverstanden?

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

                      @mickym Ja, aber erst will ich mir weiter Gedanken machen.

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

                        @mickym Ich kann Dir nicht erklären, warum ich es nicht schaffe, aber irgendwie sind alle Versuche fehlgeschlagen.

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

                          @damrak2022 OK - ich zeichne etwas - das lässt Dir noch so ca. 5 Minuten. 😉

                          26f54e88-a5e6-4e73-9c91-5b3abdd5b300-image.png

                          Also OBJEKT - PUNKT - EIGENSCHAFT.

                          Also

                          Objekt.Eigenschaft
                          

                          oder

                          payload.Nachname
                          

                          Hier hast Du mir ganz toll mit der Abfrage das Objekt gelbes Zimmer selektiert. Ich mach noch mal eine solche Zeichnung und dann die finale Lösung.

                          https://forum.iobroker.net/post/942409

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

                            @mickym Ja, so sieht mein Code auch immer noch aus.

                            mickym 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 Ja, so sieht mein Code auch immer noch aus.

                              11fa88fd-3528-4b3f-8047-8ed90ea7b2b6-image.png

                              und nun wollen wir aus diesem Objekt den Preis. 😉

                              und hier ist ....

                              Moment .... tada

                              die Lösung:

                              58693e64-9a50-4d00-9ebc-7a6ce02b0031-image.png

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

                                @mickym Das ist doch nicht wahr, oder? Ich reche mir einen ab

                                mickym 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 Das ist doch nicht wahr, oder? Ich reche mir einen ab

                                  Und jetzt sag mir mal das JSONATA nicht genial ist.

                                  Und weil es so genial ist, dann gib mir doch bitte den Schlüssel mit der Nr. ???? für das "gelbe Zimmer".

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

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

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

                                      @mickym Sorry, habe ich eben erst gesehen.
                                      Bildschirm­foto 2023-02-06 um 23.33.24.png

                                      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 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            688
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            4845
                                            2324945
                                            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