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. Vergleich von zwei Eingangswerten um Wert festzulegen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Vergleich von zwei Eingangswerten um Wert festzulegen

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

      @claus1985-0 Das wird nicht funktionieren - zum einen hast Du ja nun die gleiche Node als Eingang verwendet - und selbst wenn Du unterschiedliche Nodes nimmst, wird immer gerade die, die gerade 0 sendet eine 2 ausspuken und das random - da beide Nachrichten nicht gleichzeitig ausgewertet werden.

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

        @mickym da hast Du leider recht, optimal ist die Lösung nicht. Das wird nur funktionieren, wenn der Rolladen "langsam" bedient wird. Also wenn schnell verschiedene Kommandos kommen passt es nicht mehr..

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

          @claus1985-0 Ich bastel noch etwas - jedenfalls kannst Du es nur mit der von @frankyboy73 vorgeschlagenen JOIN Lösung machen, wobei man halt ggf. nochmal die Bedingungen prüft. Ich bastel auch gerade mal. 😉
          Im Prinzip sollte die Lösung von @frankyboy73 funktionieren, musst halt nur eine 2 anstelle einer 3 in die Change NOde machen. Was geht denn nicht?

          Du kannst den Zähler in der JOIN Node zur Initialisierung entweder auf 1 runter setzen oder Du initialisierst die Join-Node einmalig mit einer Inject Node.

          So habe ich es nun aus Deiner Beschreibung verstanden:

          c31096d7-5e99-46b0-b920-bb93174b1376-image.png

          Hab also erst hoch fahren lassen - dann stopp - dann runter fahren lassen - dann stop.

          [{"id":"d6f6c88983323c92","type":"join","z":"7eaefb9168296580","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":350,"y":1900,"wires":[["4d9a1e9eaa70101d","a66b11e133bf7bd0"]]},{"id":"a42aca12b398df5d","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"hoch","payload":"0","payloadType":"num","x":170,"y":1820,"wires":[["d6f6c88983323c92"]]},{"id":"a56bcf63840eb879","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"hoch","payload":"1","payloadType":"num","x":170,"y":1860,"wires":[["d6f6c88983323c92"]]},{"id":"b7bd8fc4c3d4ca85","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"runter","payload":"0","payloadType":"num","x":170,"y":1940,"wires":[["d6f6c88983323c92"]]},{"id":"f47feda753524fae","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"runter","payload":"1","payloadType":"num","x":170,"y":1980,"wires":[["d6f6c88983323c92"]]},{"id":"4d9a1e9eaa70101d","type":"debug","z":"7eaefb9168296580","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":470,"y":1740,"wires":[]},{"id":"1b9e490a83b117ee","type":"comment","z":"7eaefb9168296580","name":"bekannte Anzahl an Werten","info":"","x":190,"y":1720,"wires":[]},{"id":"a66b11e133bf7bd0","type":"switch","z":"7eaefb9168296580","name":"Not(wert1 ODER wert2)","property":"$not(payload.hoch or payload.runter)","propertyType":"jsonata","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":550,"y":1900,"wires":[["44a9eb82edb9decf"],["5c4e69f2525bad01","5e4e441797464d24"]]},{"id":"44a9eb82edb9decf","type":"change","z":"7eaefb9168296580","name":"Stopped = 2","rules":[{"t":"set","p":"payload","pt":"msg","to":"2","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":910,"y":1840,"wires":[["cc4868bd36beedce"]]},{"id":"cc4868bd36beedce","type":"debug","z":"7eaefb9168296580","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1310,"y":1840,"wires":[]},{"id":"5c4e69f2525bad01","type":"switch","z":"7eaefb9168296580","name":"Rolladen runter = Increasing","property":"payload.runter","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":860,"y":1900,"wires":[["938321cec7b2f778"]]},{"id":"5e4e441797464d24","type":"switch","z":"7eaefb9168296580","name":"Rolladen hoch = decreasing","property":"payload.hoch","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":860,"y":1960,"wires":[["0b2919fc74be76f7"]]},{"id":"938321cec7b2f778","type":"change","z":"7eaefb9168296580","name":"Increasing = 1","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1100,"y":1900,"wires":[["cc4868bd36beedce"]]},{"id":"0b2919fc74be76f7","type":"change","z":"7eaefb9168296580","name":"Decreasing = 0","rules":[{"t":"set","p":"payload","pt":"msg","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1100,"y":1960,"wires":[["cc4868bd36beedce"]]},{"id":"bf66451996415a49","type":"inject","z":"7eaefb9168296580","name":"reset","props":[{"p":"reset","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":2060,"wires":[["d6f6c88983323c92"]]}]
          

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

            @frankyboy73 Na habe ich von Dir heute wieder was gelernt und das hat mich motiviert mal bisschen JSONATA in der Tiefe auszuprobieren.

            5f9acfb3-0bed-4e22-a9e2-9bcef370a219-image.png

            Ich wußte gar nicht, dass das geht - komischerweise aber nur mit enthält - wenn ich mit == versuche zu vergleichen - dann tut es nicht.

            Aber ich hab mich dann mit variablen Parameter mal JSONATA beschäftigt - sowohl im switch Node oder auch Change Node, wie man durch so ein Objekt sich durchhangelt. Wieder eine Möglichkeit sich von function Nodes zu verzichten. Allerdings ist die Performance etwas schlechter mit JSONATA - also mit Javascript.

            Hier mal meine erfolgreichen JSONATA Switches - der letzte Flow - ist der gerade gepostete und der vorletzte war Deiner mit dem Wildcard und enthält.

            [{"id":"7eaefb9168296580","type":"tab","label":"JSONATA - Switches","disabled":false,"info":""},{"id":"b6526cabe5865b94","type":"join","z":"7eaefb9168296580","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":410,"y":220,"wires":[["d29f2776daf6e480","8ac9cc4eb78b41fc","40dc442947ded9f3","08dc0c75145ba6af","f05e50f770e93596"]]},{"id":"f49bf464d2978ea6","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert1","payload":"0","payloadType":"num","x":230,"y":140,"wires":[["b6526cabe5865b94"]]},{"id":"90cde3f324399aae","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert1","payload":"1","payloadType":"num","x":230,"y":180,"wires":[["b6526cabe5865b94"]]},{"id":"3302e4eaddc81265","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert2","payload":"0","payloadType":"num","x":230,"y":260,"wires":[["b6526cabe5865b94"]]},{"id":"73385affd7669f0c","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert2","payload":"1","payloadType":"num","x":230,"y":300,"wires":[["b6526cabe5865b94"]]},{"id":"d29f2776daf6e480","type":"switch","z":"7eaefb9168296580","name":"wert1 UND wert2","property":"payload.wert1 and payload.wert2","propertyType":"jsonata","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":630,"y":220,"wires":[["48981365a22a9e91"],["d5dbda6dda237531"]]},{"id":"48981365a22a9e91","type":"debug","z":"7eaefb9168296580","name":"AND true","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":840,"y":200,"wires":[]},{"id":"8ac9cc4eb78b41fc","type":"debug","z":"7eaefb9168296580","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":530,"y":60,"wires":[]},{"id":"d5dbda6dda237531","type":"debug","z":"7eaefb9168296580","name":"AND false","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":840,"y":240,"wires":[]},{"id":"40dc442947ded9f3","type":"switch","z":"7eaefb9168296580","name":"wert1 ODER wert2","property":"payload.wert1 or payload.wert2","propertyType":"jsonata","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":630,"y":340,"wires":[["16ccc7d46d8b1027"],["13660292fe6c31c0"]]},{"id":"16ccc7d46d8b1027","type":"debug","z":"7eaefb9168296580","name":"OR true","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":840,"y":320,"wires":[]},{"id":"13660292fe6c31c0","type":"debug","z":"7eaefb9168296580","name":"OR false","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":840,"y":360,"wires":[]},{"id":"909e1de8cf021211","type":"switch","z":"7eaefb9168296580","name":"UND alle 0?","property":"(\t   $withOR := function($i, $j){$i or $j};\t   $withAND := function($i, $j){$i and $j};\t   $reduce(\t       $each(\t           payload,\t           function($v) {$v=0 ? true: false}\t       ),$withAND\t   );\t)\t","propertyType":"jsonata","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":610,"y":720,"wires":[["f3e5398591dc99f9"],["2112f89c079c0f63"]]},{"id":"ec106f44785b94e5","type":"join","z":"7eaefb9168296580","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":450,"y":720,"wires":[["49b33cd086b17ba6","909e1de8cf021211"]]},{"id":"1a31ace124b3cf93","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert1","payload":"0","payloadType":"num","x":230,"y":560,"wires":[["ec106f44785b94e5"]]},{"id":"7a83da89697bf8a6","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert1","payload":"1","payloadType":"num","x":230,"y":600,"wires":[["ec106f44785b94e5"]]},{"id":"22a133856fadf15e","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert2","payload":"0","payloadType":"num","x":230,"y":680,"wires":[["ec106f44785b94e5"]]},{"id":"7d4c6cdbcb27beed","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert2","payload":"1","payloadType":"num","x":230,"y":720,"wires":[["ec106f44785b94e5"]]},{"id":"49b33cd086b17ba6","type":"debug","z":"7eaefb9168296580","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":630,"y":640,"wires":[]},{"id":"f3e5398591dc99f9","type":"debug","z":"7eaefb9168296580","name":"true","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":700,"wires":[]},{"id":"2112f89c079c0f63","type":"debug","z":"7eaefb9168296580","name":"false","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":740,"wires":[]},{"id":"21915f951fb9c032","type":"switch","z":"7eaefb9168296580","name":"nur wenn beide Werte am Wochenende sind","property":"(\t   $withOR := function($i, $j){$i or $j};\t   $withAND := function($i, $j){$i and $j};\t   $reduce(\t       $each(\t           payload,\t           function($v) {\t               $count(\t                   $match($v,/Samstag|Sonntag/)\t           ) > 0\t           }\t       ),\t       $withAND\t\t   )\t   )","propertyType":"jsonata","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":670,"y":1060,"wires":[["7db1ead9f804d602"],["80ec66b9b9cfe19a"]]},{"id":"da503998ee50fdc5","type":"join","z":"7eaefb9168296580","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":410,"y":1060,"wires":[["4ece76dce4e20554","21915f951fb9c032","bc6be5f7e5ba04f0"]]},{"id":"c1537b7dcade1846","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert1","payload":"Donnerstag","payloadType":"str","x":210,"y":980,"wires":[["da503998ee50fdc5"]]},{"id":"7c07ce3ff45224d4","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert1","payload":"Samstag","payloadType":"str","x":220,"y":1020,"wires":[["da503998ee50fdc5"]]},{"id":"f48782c2b436a169","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert2","payload":"Freitag","payloadType":"str","x":230,"y":1100,"wires":[["da503998ee50fdc5"]]},{"id":"07784380b309b207","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert2","payload":"Sonntag","payloadType":"str","x":230,"y":1140,"wires":[["da503998ee50fdc5"]]},{"id":"4ece76dce4e20554","type":"debug","z":"7eaefb9168296580","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":590,"y":960,"wires":[]},{"id":"7db1ead9f804d602","type":"debug","z":"7eaefb9168296580","name":"true","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":930,"y":1040,"wires":[]},{"id":"80ec66b9b9cfe19a","type":"debug","z":"7eaefb9168296580","name":"false","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":930,"y":1080,"wires":[]},{"id":"bc6be5f7e5ba04f0","type":"change","z":"7eaefb9168296580","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"(\t   $withOR := function($i, $j){$i or $j};\t   $withAND := function($i, $j){$i and $j};\t   $reduce(\t       $each(\t           payload,\t           function($v) {\t               $count(\t                   $match($v,/Samstag|Sonntag/)\t           ) > 0\t           }\t       ),\t       $withAND\t\t   )\t   )\t","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":1180,"wires":[["5b4815567def8ccf"]]},{"id":"5b4815567def8ccf","type":"debug","z":"7eaefb9168296580","name":"JSONATA","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":810,"y":1180,"wires":[]},{"id":"cefe135b96d8748c","type":"comment","z":"7eaefb9168296580","name":"bekannte Anzahl an Werten","info":"","x":250,"y":40,"wires":[]},{"id":"49cc80ef9c799431","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert3","payload":"0","payloadType":"num","x":230,"y":800,"wires":[["ec106f44785b94e5"]]},{"id":"344b4f2d39d3bc85","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert3","payload":"1","payloadType":"num","x":230,"y":840,"wires":[["ec106f44785b94e5"]]},{"id":"4fe3b9368d9ff476","type":"comment","z":"7eaefb9168296580","name":"unbekannte Anzahl an Werten","info":"","x":200,"y":500,"wires":[]},{"id":"6703c8f0.f3af68","type":"join","z":"7eaefb9168296580","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"0","count":"1","reduceRight":false,"reduceExp":"","reduceInit":"true","reduceInitType":"bool","reduceFixup":"","x":350,"y":1540,"wires":[["e64bce40.fb1a7"]]},{"id":"e64bce40.fb1a7","type":"switch","z":"7eaefb9168296580","name":"","property":"payload.*","propertyType":"jsonata","rules":[{"t":"cont","v":"1","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":530,"y":1540,"wires":[[],["cadb73d0.36e15"]]},{"id":"9f92fb04.dd2c18","type":"debug","z":"7eaefb9168296580","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":890,"y":1540,"wires":[]},{"id":"cadb73d0.36e15","type":"change","z":"7eaefb9168296580","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"2","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":1540,"wires":[["9f92fb04.dd2c18"]]},{"id":"66f1b68a8f12d4c3","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert1","payload":"0","payloadType":"num","x":210,"y":1460,"wires":[["6703c8f0.f3af68"]]},{"id":"24a0806d4f0ae7f9","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert1","payload":"1","payloadType":"num","x":210,"y":1500,"wires":[["6703c8f0.f3af68"]]},{"id":"00621244f697af30","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert2","payload":"0","payloadType":"num","x":210,"y":1580,"wires":[["6703c8f0.f3af68"]]},{"id":"8f16ea31dfd903ed","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"wert2","payload":"1","payloadType":"num","x":210,"y":1620,"wires":[["6703c8f0.f3af68"]]},{"id":"c2f37be9204e30ea","type":"comment","z":"7eaefb9168296580","name":"Frankyboys Lösung","info":"","x":150,"y":1380,"wires":[]},{"id":"08dc0c75145ba6af","type":"switch","z":"7eaefb9168296580","name":"Not(wert1 ODER wert2)","property":"$not(payload.wert1 or payload.wert2)","propertyType":"jsonata","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":630,"y":120,"wires":[["a47f067c8177b79d"],["87ce3ab64d161019"]]},{"id":"a47f067c8177b79d","type":"debug","z":"7eaefb9168296580","name":"NOT OR true (XOR)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":880,"y":100,"wires":[]},{"id":"87ce3ab64d161019","type":"debug","z":"7eaefb9168296580","name":"NOT OR false(XOR)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":880,"y":140,"wires":[]},{"id":"f05e50f770e93596","type":"change","z":"7eaefb9168296580","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"(\t   $withOR := function($i, $j){$i or $j};\t   $withAND := function($i, $j){$i and $j};\t   $reduce(\t       $each(\t           payload,\t           function($v) {$v=0 ? true: false}\t       ),$withAND\t   ) ? 2 : 0;\t)\t","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":420,"wires":[["f75d1f1bd104a1ca"]]},{"id":"f75d1f1bd104a1ca","type":"debug","z":"7eaefb9168296580","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":850,"y":420,"wires":[]},{"id":"d6f6c88983323c92","type":"join","z":"7eaefb9168296580","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":350,"y":1900,"wires":[["4d9a1e9eaa70101d","a66b11e133bf7bd0"]]},{"id":"a42aca12b398df5d","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"hoch","payload":"0","payloadType":"num","x":170,"y":1820,"wires":[["d6f6c88983323c92"]]},{"id":"a56bcf63840eb879","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"hoch","payload":"1","payloadType":"num","x":170,"y":1860,"wires":[["d6f6c88983323c92"]]},{"id":"b7bd8fc4c3d4ca85","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"runter","payload":"0","payloadType":"num","x":170,"y":1940,"wires":[["d6f6c88983323c92"]]},{"id":"f47feda753524fae","type":"inject","z":"7eaefb9168296580","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"runter","payload":"1","payloadType":"num","x":170,"y":1980,"wires":[["d6f6c88983323c92"]]},{"id":"4d9a1e9eaa70101d","type":"debug","z":"7eaefb9168296580","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":470,"y":1740,"wires":[]},{"id":"1b9e490a83b117ee","type":"comment","z":"7eaefb9168296580","name":"bekannte Anzahl an Werten","info":"","x":190,"y":1720,"wires":[]},{"id":"a66b11e133bf7bd0","type":"switch","z":"7eaefb9168296580","name":"Not(wert1 ODER wert2)","property":"$not(payload.hoch or payload.runter)","propertyType":"jsonata","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":550,"y":1900,"wires":[["44a9eb82edb9decf"],["5c4e69f2525bad01","5e4e441797464d24"]]},{"id":"44a9eb82edb9decf","type":"change","z":"7eaefb9168296580","name":"Stopped = 2","rules":[{"t":"set","p":"payload","pt":"msg","to":"2","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":910,"y":1840,"wires":[["cc4868bd36beedce"]]},{"id":"cc4868bd36beedce","type":"debug","z":"7eaefb9168296580","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1310,"y":1840,"wires":[]},{"id":"5c4e69f2525bad01","type":"switch","z":"7eaefb9168296580","name":"Rolladen runter = Increasing","property":"payload.runter","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":860,"y":1900,"wires":[["938321cec7b2f778"]]},{"id":"5e4e441797464d24","type":"switch","z":"7eaefb9168296580","name":"Rolladen hoch = decreasing","property":"payload.hoch","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":860,"y":1960,"wires":[["0b2919fc74be76f7"]]},{"id":"938321cec7b2f778","type":"change","z":"7eaefb9168296580","name":"Increasing = 1","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1100,"y":1900,"wires":[["cc4868bd36beedce"]]},{"id":"0b2919fc74be76f7","type":"change","z":"7eaefb9168296580","name":"Decreasing = 0","rules":[{"t":"set","p":"payload","pt":"msg","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1100,"y":1960,"wires":[["cc4868bd36beedce"]]},{"id":"bf66451996415a49","type":"inject","z":"7eaefb9168296580","name":"reset","props":[{"p":"reset","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":160,"y":2060,"wires":[["d6f6c88983323c92"]]},{"id":"79abd835b67d10d8","type":"comment","z":"7eaefb9168296580","name":"nur wenn beide Werte am Wochenende","info":"","x":230,"y":900,"wires":[]}]
            

            R Claus1985 0 2 Replies Last reply Reply Quote 0
            • R
              rewenode @mickym last edited by

              @mickym sagte in Vergleich von zwei Eingangswerten um Wert festzulegen:

              Ich wußte gar nicht, dass das geht - komischerweise aber nur mit enthält - wenn ich mit == versuche zu vergleichen - dann tut es nicht.

              Der

              payload.* (oder einfach $.*)
              

              gibt nach dem Join ein Array mit 2 Werten zurück, das kannst du nicht mit einem Number vergleichen. Wohl aber fragen, ob ein bestimmter Wert enthalten ist.

              Gruß
              Reiner

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

                @mickym Vielen Dank für Deine Lösung, sieht elegant aus!
                Aktuell hänge ich leider noch etwas am Join:

                2.PNG 1.PNG

                Die beiden Eingangsnachrichten kommen zwar an aber aus Join kommt danach nichts raus.
                Kann das daran liegen, dass die beiden Eingänge nicht gleichzeitig Nachrichten senden?

                Danke und Gruß,

                Claus

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

                  @claus1985-0 sagte in Vergleich von zwei Eingangswerten um Wert festzulegen:

                  Die beiden Eingangsnachrichten kommen zwar an aber aus Join kommt danach nichts raus.
                  Kann das daran liegen, dass die beiden Eingänge nicht gleichzeitig Nachrichten senden?

                  Nun am Anfang wird abgewartet bis jede Nachricht gesendet wurde - es liegt eher daran, wenn ich mir Dein Log anschaue, dass beide Nodes das gleiche Topic haben. Somit kann die JOIN Node nicht unterscheiden, dass die Nachricht von 2 verschiedenen Nodes stammt. Setze mal zwischen die JOIN Node und den Loxone Teilen explizit das Topic. (Einmal hoch und einmal runter)

                  606901e5-390f-4e11-8a91-444c86992f70-image.png

                  Den Haken in der JOIN Node ist ja gesetzt:

                  aec4a048-6e94-4f80-b3db-7b8c84248d9f-image.png

                  Sprich: die JOIN Node beginnt erst zu senden, wenn einmal beide Nodes mit unterschiedlichen Topics gesendet haben, dann aber sofort immer - also hat nichts mit gleichzeitig zu tun.

                  [{"id":"13db51180fe3477f","type":"change","z":"7eaefb9168296580","name":"Kinderzimmer_Runter","rules":[{"t":"set","p":"topic","pt":"msg","to":"runter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":800,"y":2160,"wires":[[]]},{"id":"25212222915da503","type":"change","z":"7eaefb9168296580","name":"Kinderzimmer_Rauf","rules":[{"t":"set","p":"topic","pt":"msg","to":"hoch","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":800,"y":2200,"wires":[[]]}]
                  

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

                    @rewenode sagte in Vergleich von zwei Eingangswerten um Wert festzulegen:

                    @mickym sagte in Vergleich von zwei Eingangswerten um Wert festzulegen:

                    Ich wußte gar nicht, dass das geht - komischerweise aber nur mit enthält - wenn ich mit == versuche zu vergleichen - dann tut es nicht.

                    Der

                    payload.* (oder einfach $.*)
                    

                    gibt nach dem Join ein Array mit 2 Werten zurück, das kannst du nicht mit einem Number vergleichen. Wohl aber fragen, ob ein bestimmter Wert enthalten ist.

                    Gruß
                    Reiner

                    Herzlichen Dank! - Schön, wenn Du mir auch immer wieder hilfst mit Deinem Wissen.

                    Im Prinzip wird also mit $* einfach so ein Array gebildet, dass ich mit dem $each nochmal auseinander fummle? und dann wohl für den Vergleich nur ein match ala regEx gemacht.

                    74e4f1df-d3bc-4574-bce7-2b7c561eb1b5-image.png

                    785d0209-55aa-4064-9a35-fd1b63e7d51a-image.png

                    OK sehe ich - allerdings muss man es dann für die Vergleiche trotzdem auseinander fummeln. 😉

                           $each(
                               $.*,
                               function($v) {$v=0 ? true: false}
                       
                       );
                    

                    Insofern hilft mir die Schreibweise ja eigentlich nichts. Ob ich jetzt payload oder $.* schreibe, da ist dann payload beschreibender. 😉

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

                      @Claus1985-0

                      Habe meinen vorhergehenden Post überarbeitet. Die topics müssen zwingend hoch und runter heißen - da sonst ja der Flow nicht mehr passt.

                      6517d118-17d8-4814-a1a0-fd90a5b84b82-image.png

                      Ansonsten musst Du halt alle Nodes an die neuen Topics anpassen.

                      cf36047b-7d47-463f-9a18-97677c3ac4b3-image.png

                      fdc3008c-fc70-447f-944f-52df69e778ef-image.png

                      So hier nochmal der komplette Flow - direkt zum Anflanschen der Loxone Nodes:

                      Mit aufgenommen wurde das Ausfiltern, dass beide Nodes 1 liefern:

                      44577d50-f06b-48a3-9278-3f47ef34f552-image.png

                      [{"id":"f2ea2908d88f1ab2","type":"join","z":"7eaefb9168296580","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":510,"y":2000,"wires":[["4b6bcb50966b0a0c","22c744f5d81e7ba6"]]},{"id":"22c744f5d81e7ba6","type":"switch","z":"7eaefb9168296580","name":"Not(wert1 ODER wert2)","property":"$not(payload.hoch or payload.runter)","propertyType":"jsonata","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":710,"y":2000,"wires":[["afb323cfc1bf25c8"],["ad9f71d56fb6f349"]]},{"id":"afb323cfc1bf25c8","type":"change","z":"7eaefb9168296580","name":"Stopped = 2","rules":[{"t":"set","p":"payload","pt":"msg","to":"2","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1070,"y":1940,"wires":[["d318f1935ef49ef5"]]},{"id":"7be3c438b8976f82","type":"switch","z":"7eaefb9168296580","name":"Rolladen runter = Increasing","property":"payload.runter","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":1220,"y":2020,"wires":[["9b551e2006fd93dc"]]},{"id":"44c83453fbeb6c4b","type":"switch","z":"7eaefb9168296580","name":"Rolladen hoch = decreasing","property":"payload.hoch","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":1220,"y":2080,"wires":[["6520234fe5d0f6b1"]]},{"id":"9b551e2006fd93dc","type":"change","z":"7eaefb9168296580","name":"Increasing = 1","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1460,"y":2020,"wires":[["d318f1935ef49ef5"]]},{"id":"6520234fe5d0f6b1","type":"change","z":"7eaefb9168296580","name":"Decreasing = 0","rules":[{"t":"set","p":"payload","pt":"msg","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1460,"y":2080,"wires":[["d318f1935ef49ef5"]]},{"id":"6a8ef99635e6f249","type":"change","z":"7eaefb9168296580","name":"Kinderzimmer_Runter","rules":[{"t":"set","p":"topic","pt":"msg","to":"runter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":2040,"wires":[["f2ea2908d88f1ab2"]]},{"id":"e57c65b90a155939","type":"change","z":"7eaefb9168296580","name":"Kinderzimmer_Rauf","rules":[{"t":"set","p":"topic","pt":"msg","to":"hoch","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":1980,"wires":[["f2ea2908d88f1ab2"]]},{"id":"ad9f71d56fb6f349","type":"switch","z":"7eaefb9168296580","name":"Ausfiltern beides 1","property":"$not(payload.hoch and payload.runter)","propertyType":"jsonata","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":950,"y":2040,"wires":[["44c83453fbeb6c4b","7be3c438b8976f82"]]}]
                      

                      Claus1985 0 1 Reply Last reply Reply Quote 0
                      • R
                        rewenode @mickym last edited by

                        @mickym sagte in Vergleich von zwei Eingangswerten um Wert festzulegen:

                        Ob ich jetzt payload oder $.* schreibe, da ist dann payload beschreibender.

                        Ja, da hast du recht. $ steht in JSONata für das komplette Eingabedocument (siehe ganz unten)
                        In Node-Red steht das $ dann für das, dem JSONata-Ausdruck, vorgesetzte Eingabeobjekt. Im konkreten Falle also payload.
                        $$ bezeichnet dagegen immer das Top level Object wie hier ganz gut beschrieben .

                        Gruß
                        Reiner

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

                          @rewenode 👍 👍 👍

                          Danke schön. Die UK - Seite kannte ich noch nicht. Die andere war bislang schon meine Referenz. 🙂

                          1 Reply Last reply Reply Quote 0
                          • F
                            frankyboy73 last edited by frankyboy73

                            @mickym sagte in Vergleich von zwei Eingangswerten um Wert festzulegen:

                            Hier mal meine erfolgreichen JSONATA Switches - der letzte Flow - ist der gerade gepostete und der vorletzte war Deiner mit dem Wildcard und enthält.

                            Hi, da muss ich ganz ehrlich sagen, das ich das für mich für zu unübersichtlich halte, wenn ich nach Wochen mal schauen will was ich da umgestezt habe, auch kenne ich mich da ehrlich gesagt nicht genug mit Json bzw. Java aus um das aus dem Stehgreif nachvollziehen zu können. Da passiert mir zu viel versteckt in der Change Node. Wenn ich wirklich nur 2 verschiedene Status überwachen will, z,B. true oder false bzw. 1 oder 0 finde ich meine Lösung mit dem Switch und danach die Change Node zum payload setzen nachvollziehbarer. In meinem Fall nutze ich das z.B. um mir in der Vis anzeigen zu lassen ob in einem bestimmten Raum Licht an ist. Ist einer der Datenpunkte true, ist das Icon Gelb, andernfalls ist es schwarz.
                            Dash5.jpg
                            Wenn man natürlich mehrere verschiedene Werte z.B. 0-100 bekommt, vereinfacht deine Version mit der Change Node die ganze Sache sehr, wenn ich nur ne Ausgabe, wenn alle 0 sind oder bei nem anderen bestimmten Wert haben will.

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

                              @frankyboy73 Ich habe jetzt meine function Nodes - die alle Objekteigenschaften überprüft haben durch folgende logische Nodes ersetzt:

                              53586a34-6133-4a3f-afd4-75b129f11c81-image.png

                              [
                                 {
                                     "id": "42e1e0df.44b9f",
                                     "type": "tab",
                                     "label": "Flow 1",
                                     "disabled": false,
                                     "info": ""
                                 },
                                 {
                                     "id": "1b34ca2b.069996",
                                     "type": "switch",
                                     "z": "42e1e0df.44b9f",
                                     "name": "AND?",
                                     "property": "(\t $withAND := function($i, $j){$i and $j};\t $reduce(\t $each(\t payload,\t function($v) {$v}\t ),$withAND\t );\t)",
                                     "propertyType": "jsonata",
                                     "rules": [
                                         {
                                             "t": "true"
                                         },
                                         {
                                             "t": "false"
                                         }
                                     ],
                                     "checkall": "true",
                                     "repair": false,
                                     "outputs": 2,
                                     "x": 750,
                                     "y": 160,
                                     "wires": [
                                         [],
                                         []
                                     ],
                                     "info": "# All Property have specfic value\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 haben einen speziellen Wert\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": "560feab7.492ee4",
                                     "type": "switch",
                                     "z": "42e1e0df.44b9f",
                                     "name": "OR?",
                                     "property": "(\t $withOR := function($i, $j){$i or $j};\t $reduce(\t $each(\t payload,\t function($v) {$v}\t ),$withOR\t );\t)",
                                     "propertyType": "jsonata",
                                     "rules": [
                                         {
                                             "t": "true"
                                         },
                                         {
                                             "t": "false"
                                         }
                                     ],
                                     "checkall": "true",
                                     "repair": false,
                                     "outputs": 2,
                                     "x": 550,
                                     "y": 160,
                                     "wires": [
                                         [],
                                         []
                                     ],
                                     "info": "# One Property has to be false\n\nOnly one property of an object needs to be false.\n\n`{\n    \"Office\": false,\n    \"Bedroom\": false,\n    \"Living Room Balcony\": false,\n    \"Liviueng Room Right Window\": false,\n    \"Living Room Left Window\": false\n}`\n\nis false,\n\n`{\n    \"Office\": false,\n    \"Bedroom\": true,\n    \"Living Room Balcony\": false,\n    \"Living Room Right Window\": false,\n    \"Living Room Left Window\": false\n}`\n\nis true.\n\n# Mindestens eine Eigenschaft muss wahr sein\n\nMindestens eine Eigenschaft des Objektes müssen wahr sein.\n\n`{\n    \"Büro Balkon\": false,\n    \"Schlafzimmer Balkon\": false,\n    \"Wohnzimmer Balkon\": false,\n    \"Wohnzimmer rechtes Fenster\": false,\n    \"Wohnzimmer linkes Fenster\": false\n}`\n\nergibt false,\n\n`{\n    \"Büro Balkon\": false,\n    \"Schlafzimmer Balkon\": true,\n    \"Wohnzimmer Balkon\": false,\n    \"Wohnzimmer rechtes Fenster\": false,\n    \"Wohnzimmer linkes Fenster\": false\n}`\n\nergibt true (wahr)."
                                 },
                                 {
                                     "id": "55624631.5d1df8",
                                     "type": "change",
                                     "z": "42e1e0df.44b9f",
                                     "name": "AND ?",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "payload",
                                             "pt": "msg",
                                             "to": "(\t $withAND := function($i, $j){$i and $j};\t $reduce(\t $each(\t payload,\t function($v) {$v}\t ),$withAND\t );\t)",
                                             "tot": "jsonata"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 750,
                                     "y": 200,
                                     "wires": [
                                         []
                                     ]
                                 },
                                 {
                                     "id": "e00ef3c6.e6aed",
                                     "type": "change",
                                     "z": "42e1e0df.44b9f",
                                     "name": "OR ?",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "payload",
                                             "pt": "msg",
                                             "to": "(\t   $withOR := function($i, $j){$i or $j};\t   $reduce(\t       $each(  payload,  function($v) {$v}  ),\t       $withOR  \t   );\t   )",
                                             "tot": "jsonata"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 550,
                                     "y": 200,
                                     "wires": [
                                         []
                                     ]
                                 },
                                 {
                                     "id": "56b3f1c8.67898",
                                     "type": "change",
                                     "z": "42e1e0df.44b9f",
                                     "name": "NOT",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "payload",
                                             "pt": "msg",
                                             "to": "$not(payload)\t",
                                             "tot": "jsonata"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 920,
                                     "y": 180,
                                     "wires": [
                                         []
                                     ]
                                 }
                              ]
                              

                              Geht halt nur bei true und false - aber dann ist das sehr einfach nun.

                              F R 2 Replies Last reply Reply Quote 1
                              • F
                                frankyboy73 @mickym last edited by frankyboy73

                                @mickym Ok, das ist jetzt auch für mich nachvollziehbarer. Du hast ja sogar nen Hilfe Text zu den Switches geschrieben. Vielleicht sollte ich sowas, bei meinen Umsetzungen auch mal öfter machen, dann weiß man später auch wofür man das gemacht hat. Tolle Idee.

                                @mickym
                                Aber durch das was da in Json drin steht steige ich nicht durch, ich sehe bei dem "and" switch nicht wie abgefragt wird ob alle true sind. Könntest du mir das noch als switch wo alle false sein müssen zu Verfügung stellen?

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

                                  @mickym hat funktioniert, besten Dank!
                                  Eine Frage habe ich noch. Gibt es eine Möglichkeit mehrere Blöcke welche in Summe eine zusammenhängende Funktion bilden irgendwie zusammen zu fassen?
                                  Hintergrund: Wenn ich die Funktion öfter benötige wäre es ja cool wenn ich sie nur einmal erstellen muss und dann quasi an mehreren Stellen darauf verlinken könnte.

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

                                    @claus1985-0 Hier als Gruppe und einer eigenen Node für die Zukunft.

                                    [{"id":"6433d2174606172b","type":"group","z":"7eaefb9168296580","name":"Kinderzimmer","style":{"fill":"#ffefbf","label":true},"nodes":["6a8ef99635e6f249","e57c65b90a155939","b5094973c356d401"],"x":714,"y":1959,"w":392,"h":142},{"id":"f4f4c909aa9c4507","type":"subflow","name":"Status Jalousie","info":"","category":"","in":[{"x":40,"y":120,"wires":[{"id":"f2ea2908d88f1ab2"}]}],"out":[{"x":1340,"y":160,"wires":[{"id":"afb323cfc1bf25c8","port":0},{"id":"9b551e2006fd93dc","port":0},{"id":"6520234fe5d0f6b1","port":0}]}],"env":[],"meta":{},"color":"#3FADB5","outputLabels":["Stopped (2)","Increasing (1)","Decreasing (0)"],"icon":"node-red/sort.svg"},{"id":"f2ea2908d88f1ab2","type":"join","z":"f4f4c909aa9c4507","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":170,"y":120,"wires":[["22c744f5d81e7ba6"]]},{"id":"22c744f5d81e7ba6","type":"switch","z":"f4f4c909aa9c4507","name":"Not(wert1 ODER wert2)","property":"$not(payload.hoch or payload.runter)","propertyType":"jsonata","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":410,"y":120,"wires":[["afb323cfc1bf25c8"],["ad9f71d56fb6f349"]]},{"id":"afb323cfc1bf25c8","type":"change","z":"f4f4c909aa9c4507","name":"Stopped = 2","rules":[{"t":"set","p":"payload","pt":"msg","to":"2","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1150,"y":100,"wires":[[]]},{"id":"7be3c438b8976f82","type":"switch","z":"f4f4c909aa9c4507","name":"Rolladen runter = Increasing","property":"payload.runter","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":900,"y":160,"wires":[["9b551e2006fd93dc"]]},{"id":"44c83453fbeb6c4b","type":"switch","z":"f4f4c909aa9c4507","name":"Rolladen hoch = decreasing","property":"payload.hoch","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":900,"y":220,"wires":[["6520234fe5d0f6b1"]]},{"id":"9b551e2006fd93dc","type":"change","z":"f4f4c909aa9c4507","name":"Increasing = 1","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1140,"y":160,"wires":[[]]},{"id":"6520234fe5d0f6b1","type":"change","z":"f4f4c909aa9c4507","name":"Decreasing = 0","rules":[{"t":"set","p":"payload","pt":"msg","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1140,"y":220,"wires":[[]]},{"id":"ad9f71d56fb6f349","type":"switch","z":"f4f4c909aa9c4507","name":"Ausfiltern beides 1","property":"$not(payload.hoch and payload.runter)","propertyType":"jsonata","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":630,"y":180,"wires":[["44c83453fbeb6c4b","7be3c438b8976f82"]]},{"id":"6a8ef99635e6f249","type":"change","z":"7eaefb9168296580","g":"6433d2174606172b","name":"runter","rules":[{"t":"set","p":"topic","pt":"msg","to":"runter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":790,"y":2060,"wires":[["b5094973c356d401"]]},{"id":"e57c65b90a155939","type":"change","z":"7eaefb9168296580","g":"6433d2174606172b","name":"hoch","rules":[{"t":"set","p":"topic","pt":"msg","to":"hoch","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":790,"y":2000,"wires":[["b5094973c356d401"]]},{"id":"b5094973c356d401","type":"subflow:f4f4c909aa9c4507","z":"7eaefb9168296580","g":"6433d2174606172b","name":"","env":[],"x":1000,"y":2040,"wires":[["d318f1935ef49ef5"]]}]
                                    

                                    398a7ddf-1f3c-442e-b60c-b7c7585b8247-image.png

                                    Wenn Du nur die Node benutzt - musst halt immer Bedenken, dass den topic hoch und topic runter setzt bevor Du die Node fütterst. Kannst Dir ja auch einen Hilfetext dazu schreiben.

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

                                      @mickym sagte in Vergleich von zwei Eingangswerten um Wert festzulegen:

                                      Ich habe jetzt meine function Nodes - die alle Objekteigenschaften überprüft haben durch folgende logische Nodes ersetzt:

                                      Super👍

                                      Du kannst die Ausdrücke noch um Einiges vereinfachen. Hier mal am Beispiel der OR mit den 2 Augängen:

                                      (
                                       $withOR := function($i, $j){$i or $j};
                                       $reduce(
                                       $each(
                                       payload,
                                       function($v) {$v}
                                       ),$withOR
                                       );
                                      )
                                      

                                      kannst du ersetzen durch:

                                      $reduce(payload.*, function($i, $j){$i or $j})
                                      

                                      Gruß
                                      Reiner

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

                                        @rewenode Wow - danke - ob ich dass dann aber in paar Monaten noch verstehe. 🙂 Aber probiere ich gleich aus.

                                        Lieben Dank!!! 🙂

                                        1 Reply Last reply Reply Quote 0
                                        • F
                                          frankyboy73 last edited by frankyboy73

                                          Hi, ich will hier ja jetzt nicht den Lehrmeister oder so rauskehren, aber ist nicht immer die rede davon Node Red soll verständlich, übersichtlich und nachvollziehbar sein? Man sollte von Funktion Node absehen?
                                          Die meisten meiner Funktion Nodes habe ich mitlerweile ersetzen können. Aber bei meinen Funktion Nodes bin ich immer noch durchgestiegen, was wo und wann passiert. Aber jetzt mit Change Nodes oder Switch Nodes zu arbeiten in denen Funktionen bzw. Json benutzt wird, da bin ich raus. Ich verstehe bei den Inhalten nur noch Bahnhof. Es funktioniert, aber wieso? Keine Ahnung. Da bleibe ich für mich doch lieber bei längeren/größeren Flows mit Standartsachen die ich auch verstehe/nachvollziehen kann.
                                          Ist nicht negativ gemeint, jeder soll es so umsetzen wie er damit am besten klar kommt.

                                          Das hier verstehe ich ja noch. Enthält das payload.* ein true setze ich den einen Ausgang, sonst den anderen Ausgang.
                                          Join1.jpg

                                          Aber was passiert hier? Kann mir das vielleicht jemand übersetzen? Schon mal Danke im voraus.

                                          $reduce(payload.*, function($i, $j){$i or $j}) 
                                          

                                          Was ist $i und $j?

                                          R mickym 2 Replies Last reply Reply Quote 0
                                          • R
                                            rewenode @frankyboy73 last edited by

                                            @frankyboy73 sagte in Vergleich von zwei Eingangswerten um Wert festzulegen:

                                            Aber was passiert hier? Kann mir das vielleicht jemand übersetzen? Schon mal Danke im voraus.

                                            Achtung, die Aussagen sind stark vereinfacht!
                                            JSONata hat erstmal nicht direkt mit Node-Red oder JavaScript zu tun. Es ist vielmehr eine eigene Scriptsprache, die speziell für die einfache universelle Abfrage/Bearbeitung von JSON-Objekten entwickelt wurde.
                                            Auf Grund ihrer Mächtigkeit wurde sie relativ früh in Node-Red an vielen Stellen benutzt und ist inzwischen in vielen Nodes direkt integriert.
                                            JSONata hat allerdings eine eigene Syntax, nicht nicht wirklich was mit JavaScript gemein hat.
                                            Um den Einstieg zu erleichtern, ist in einigen Nodes im JSONata-Editor neben der Befehlsreferenz eine Testmöglichkeit implementiert.
                                            2021-11-30_18-53-28.png

                                            In das linke Fenster "Beispielnachricht" kannst ein gültiges JSON-Objekt reinschreiben und im Ergebnisfenster erscheint das Ergebnis des JSONata-Ausdruckes, den du im oberen Fenster eintragen kannst.

                                            Zurück zum $reduce().
                                            Dabei handelt es sich um eine in JSONata eingebaute Funktion. Die allgemeine Syntax ist:

                                            $reduce(array, function [, init])
                                            

                                            Sie durchläuft ein array, wendet auf jedes Element die function an und gibt das Gesamtergebnis zurück.
                                            Die Funktion hat mindestens 2 Parameter. (genaues erfährst du im Link)
                                            Der erster Parameter ist der Accumulator, der das Ergebnis speichert. Hier $i genannt.
                                            Der zweite Parameter ($j) ist der aktuelle Array-Wert beim Durchlaufen des array.
                                            Die Benennung mit $i und $j ist dabei willkürlich.

                                            Das Array wird durch den Ausdruck payload.* aus dem payload Objekt gebildet.
                                            Aus der payload

                                             {
                                                "W1": true,
                                                "W2": false,
                                                "W3": true
                                            }
                                            

                                            erzeugt der JSONata-Ausdruck payload.* das Array

                                            [true, false, true]
                                            

                                            Auf dieses Array wird nun für alle Elemente die funktion angewendet.

                                            $i = $i or $j  // $i steht für das bisherige Ergebnis und $j für den aktuellen Wert
                                            

                                            Am Ende liefert also $reduce() den Wert $i also die or-Verknüpfung aller array-Werte zurück.

                                            Ich hoffe, ich habs auf die Schnelle einigermaßen verständlich rübergebracht.

                                            Also
                                            Braucht man unbedingt JSONata in Node-Red?
                                            Klare Antwort: Nein
                                            Aaaber, mit JSONata lassen sich äußerst komplexe JSON-Objekte teils als Einzeiler abfragen/bearbeiten. Etwa vergleichbar mit regEx.

                                            Gruß
                                            Reiner, der hier nur an der Oberfläche gekratzt hat ;-(

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            470
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            53
                                            9935
                                            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