Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. 3 Werte vergleichen und über Switch Ausgabe gleich/ungleich

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    3 Werte vergleichen und über Switch Ausgabe gleich/ungleich

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

      Hallo,
      ich habe folgenden Flow:
      cc7dd508-9f20-49b3-8e51-c2b5ecfb4e01-image.png

      Hierbei möchte ich an der Switch Node vergleichen, ob der Payload von Wert 1 - 3 gleich ist (Ausgang 1). Falls einer davon abweicht = Ausgang 2 am Switch.

      Wie vergleiche ich das ganze? Geht das über einen JSONata-Ausdruck?
      3508db40-ef25-44c5-808a-3a054f30af4d-image.png

      Anbei der aktuell Flow:

      [
          {
              "id": "197a11c1f440578d",
              "type": "tab",
              "label": "Flow 6",
              "disabled": false,
              "info": "",
              "env": []
          },
          {
              "id": "f0e9aad3a7235f24",
              "type": "inject",
              "z": "197a11c1f440578d",
              "name": "",
              "props": [
                  {
                      "p": "payload"
                  },
                  {
                      "p": "topic",
                      "vt": "str"
                  }
              ],
              "repeat": "",
              "crontab": "",
              "once": false,
              "onceDelay": 0.1,
              "topic": "Wert1",
              "payload": "30",
              "payloadType": "num",
              "x": 440,
              "y": 280,
              "wires": [
                  [
                      "5edc115ae5058566"
                  ]
              ]
          },
          {
              "id": "b8e4c456e4c046f0",
              "type": "inject",
              "z": "197a11c1f440578d",
              "name": "",
              "props": [
                  {
                      "p": "payload"
                  },
                  {
                      "p": "topic",
                      "vt": "str"
                  }
              ],
              "repeat": "",
              "crontab": "",
              "once": false,
              "onceDelay": 0.1,
              "topic": "Wert2",
              "payload": "30",
              "payloadType": "num",
              "x": 440,
              "y": 320,
              "wires": [
                  [
                      "5edc115ae5058566"
                  ]
              ]
          },
          {
              "id": "8fe50b86dfbc96e9",
              "type": "inject",
              "z": "197a11c1f440578d",
              "name": "",
              "props": [
                  {
                      "p": "payload"
                  },
                  {
                      "p": "topic",
                      "vt": "str"
                  }
              ],
              "repeat": "",
              "crontab": "",
              "once": false,
              "onceDelay": 0.1,
              "topic": "Wert3",
              "payload": "30",
              "payloadType": "num",
              "x": 440,
              "y": 360,
              "wires": [
                  [
                      "5edc115ae5058566"
                  ]
              ]
          },
          {
              "id": "5edc115ae5058566",
              "type": "join",
              "z": "197a11c1f440578d",
              "name": "",
              "mode": "custom",
              "build": "object",
              "property": "payload",
              "propertyType": "msg",
              "key": "topic",
              "joiner": "\\n",
              "joinerType": "str",
              "accumulate": true,
              "timeout": "",
              "count": "3",
              "reduceRight": false,
              "reduceExp": "",
              "reduceInit": "",
              "reduceInitType": "",
              "reduceFixup": "",
              "x": 650,
              "y": 320,
              "wires": [
                  []
              ]
          }
      ]
      

      Vielen Dank

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

        @_r_a_l_f_
        59822fa7-31fc-43f3-9c5b-eac84168580e-image.png

        Man muss alle Werte miteinander vergleichen muss aber eine AND Verknüpfung nehmen.

        Wert1 = Wert2 = Wert3 funktioniert nicht, da JSONATA immer von links nach rechts arbeitet und deshalb wird hier immer falsch rauskommen, da ein Boolean true mit 30 verglichen wird. 😉

        Deswegen solltest Du die Switch Node nicht die payload überprüfen lassen, sondern den JSONATA Ausdruck. 😉

        39fff191-79c7-48ea-9e63-b7a4a6bbe37c-image.png

        Hier der Rest Deines Flows:

        [
           {
               "id": "5986e9485ce40dc3",
               "type": "debug",
               "z": "197a11c1f440578d",
               "name": "wahr",
               "active": true,
               "tosidebar": true,
               "console": false,
               "tostatus": false,
               "complete": "payload",
               "targetType": "msg",
               "statusVal": "",
               "statusType": "auto",
               "x": 690,
               "y": 120,
               "wires": []
           },
           {
               "id": "e9987d83609820b3",
               "type": "debug",
               "z": "197a11c1f440578d",
               "name": "falsch",
               "active": true,
               "tosidebar": true,
               "console": false,
               "tostatus": false,
               "complete": "payload",
               "targetType": "msg",
               "statusVal": "",
               "statusType": "auto",
               "x": 690,
               "y": 180,
               "wires": []
           },
           {
               "id": "44eac2488650b66d",
               "type": "switch",
               "z": "197a11c1f440578d",
               "name": "",
               "property": "(payload.Wert1 = payload.Wert2) and (payload.Wert2 = payload.Wert3)",
               "propertyType": "jsonata",
               "rules": [
                   {
                       "t": "true"
                   },
                   {
                       "t": "false"
                   }
               ],
               "checkall": "true",
               "repair": false,
               "outputs": 2,
               "x": 470,
               "y": 160,
               "wires": [
                   [
                       "5986e9485ce40dc3"
                   ],
                   [
                       "e9987d83609820b3"
                   ]
               ]
           }
        ]
        

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

          @mickym Mega. Genau so habe ich mir die Lösung vorgestellt. Ich wusste nur nicht, wie ich das ganze im Switch Node abfragen muss. Aber vielen vielen Dank für die Antwort.

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

            @_r_a_l_f_ sagte in 3 Werte vergleichen und über Switch Ausgabe gleich/ungleich:

            @mickym Mega. Genau so habe ich mir die Lösung vorgestellt. Ich wusste nur nicht, wie ich das ganze im Switch Node abfragen muss. Aber vielen vielen Dank für die Antwort.

            Hier noch eine Version, die unabhängig von der Anzahl der zu vergleichenden Werte ist.

            379a1132-627c-4719-a87b-575e9d118461-image.png

            payload.*#$i.($$.payload.*[0] = $$.payload.*[$i]) ~> $reduce(function($i, $j){$i and $j})
            

            Hier der Code:

            [
               {
                   "id": "7a194f84b999469f",
                   "type": "switch",
                   "z": "197a11c1f440578d",
                   "name": "AND?",
                   "property": "payload.*#$i.($$.payload.*[0] = $$.payload.*[$i]) ~> $reduce(function($i, $j){$i and $j})",
                   "propertyType": "jsonata",
                   "rules": [
                       {
                           "t": "true"
                       },
                       {
                           "t": "false"
                       }
                   ],
                   "checkall": "true",
                   "repair": false,
                   "outputs": 2,
                   "x": 630,
                   "y": 340,
                   "wires": [
                       [
                           "3c04406fef7d9523"
                       ],
                       [
                           "baf2ab75bc89e1ae"
                       ]
                   ],
                   "info": "# All properties of an object must be true.\n\nAll properties of an object must be true.\n\n`{\n    \"Office\": true,\n    \"Bedroom\": true,\n    \"Living Room Balcony\": true,\n    \"Living Room Right Window\": true,\n    \"Living Room Left Window\": true\n}`\n\nis true,\n\n`{\n    \"Office\": true,\n    \"Bedroom\": false,\n    \"Living Room Balcony\": true,\n    \"Living Room Right Window\": true,\n    \"Living Room Left Window\": true\n}`\n\nis false.\n\n# Alle Eigenschaften eines Objektes müssen wahr sein\n\nAlle Eigenschaften eines Objektes müssen wahr sein.\n\n`{\n    \"Büro Balkon\": true,\n    \"Schlafzimmer Balkon\": true,\n    \"Wohnzimmer Balkon\": true,\n    \"Wohnzimmer rechtes Fenster\": true,\n    \"Wohnzimmer linkes Fenster\": true\n}`\n\nergibt true,\n\n`{\n    \"Büro Balkon\": true,\n    \"Schlafzimmer Balkon\": true,\n    \"Wohnzimmer Balkon\": true,\n    \"Wohnzimmer rechtes Fenster\": false,\n    \"Wohnzimmer linkes Fenster\": true\n}`\n\nergibt false."
               },
               {
                   "id": "3c04406fef7d9523",
                   "type": "debug",
                   "z": "197a11c1f440578d",
                   "name": "wahr",
                   "active": true,
                   "tosidebar": true,
                   "console": false,
                   "tostatus": false,
                   "complete": "payload",
                   "targetType": "msg",
                   "statusVal": "",
                   "statusType": "auto",
                   "x": 770,
                   "y": 320,
                   "wires": []
               },
               {
                   "id": "baf2ab75bc89e1ae",
                   "type": "debug",
                   "z": "197a11c1f440578d",
                   "name": "falsch",
                   "active": true,
                   "tosidebar": true,
                   "console": false,
                   "tostatus": false,
                   "complete": "payload",
                   "targetType": "msg",
                   "statusVal": "",
                   "statusType": "auto",
                   "x": 770,
                   "y": 360,
                   "wires": []
               }
            ]
            

            Hier wird der ERSTE Wert mit allen anderen verglichen.
            Dadurch wird ein boolesches Array mit den Ergebnissen erzeugt,

            4e3f0f86-2b4c-426e-bb55-2bcd1e13e9de-image.png

            deren Elemente mit UND verknüpft werden und zum Gesamtergebnis führen.

            7a9f2277-6ed8-476a-b88c-6a9170d45b8f-image.png

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

              @mickym Absoluter Hammer. Wie man darauf nur kommt 😄 Das ist natürlich die Königslösung 😉

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

              Support us

              ioBroker
              Community Adapters
              Donate

              974
              Online

              31.7k
              Users

              79.7k
              Topics

              1.3m
              Posts

              2
              5
              266
              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