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. function-node aktivieren/deaktivieren

    NEWS

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    function-node aktivieren/deaktivieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mark_in dark last edited by

      Hallo,
      bin neu in Node-Red.
      Ich will eine Anwesenheitssimulation machen. Letztendlich gehn die "Daten" an KNX-Geräte. Das funktioniert schon mal.

      Meine "Hauptproblem" boolsche Logiken/Nodes vermisse ich in Node-Red im Vergleich zu andern Systemen.
      Ich will, dass der Funktionsnode nur dann ausgeführt wird, wenn eine externe boolsche Bedingung erfüllt ist. z.B. ein Schalter oder bestimmte Uhrzeiten um die Anwesenheitssimulation zu aktivieren.

      Mein Code funktioniert ja nicht, weil am Eingang der Funktion der Payload zyklisch durch den Taktgeber wieder überschrieben wird. Chat GPT hat zwar Vorschläge, die funktionieren aber nicht oder ich verstehe sie nicht.

      Danke schon mal.... 😊

      [
          {
              "id": "db744027d9c55da8",
              "type": "tab",
              "label": "Anwesenheitssimulation",
              "disabled": false,
              "info": ""
          },
          {
              "id": "6e26b231fd24ccf9",
              "type": "inject",
              "z": "db744027d9c55da8",
              "name": "Taktgeber",
              "props": [],
              "repeat": "1",
              "crontab": "",
              "once": true,
              "onceDelay": "0.1",
              "topic": "",
              "x": 330,
              "y": 260,
              "wires": [
                  [
                      "cddee6fc22707fa6",
                      "9571faaa2cace06b"
                  ]
              ]
          },
          {
              "id": "cddee6fc22707fa6",
              "type": "function",
              "z": "db744027d9c55da8",
              "name": "Zufällige Lampe",
              "func": "// Überprüfen, ob die Anwesenheitssimulation aktiv ist\nif (msg.payload) { // msg.payload ist true, wenn aktiv\n    // Zufällige Lampe auswählen\n    let randomLamp = Math.floor(Math.random() * 3); // Zufällige Lampe (0, 1 oder 2)\n\n    // Zufällige Lampe und Zustand initialisieren\n    let lampStates = [\"OFF\", \"OFF\", \"OFF\"]; // Standardmäßig sind alle Lampen aus\n\n    // Eine zufällige Lampe auf \"ON\" setzen\n    lampStates[randomLamp] = \"ON\";\n\n    // Sicherstellen, dass mindestens eine Lampe \"ON\" ist\n    if (Math.random() < 0.5) { // 50% Chance, eine andere Lampe ebenfalls \"ON\" zu setzen\n        let secondLamp = (randomLamp + 1) % 3; // Eine andere Lampe auswählen\n        lampStates[secondLamp] = \"ON\"; // Diese Lampe auf \"ON\" setzen\n    }\n\n    // Die Lampenstatus in die Payload einfügen\n    msg.payload = [\n        { lamp: 0, state: lampStates[0] },\n        { lamp: 1, state: lampStates[1] },\n        { lamp: 2, state: lampStates[2] }\n    ];\n\n    return msg; // Nachricht zurückgeben, wenn aktiv\n} else {\n    // Wenn nicht aktiv, keine Veränderung an den Lampen\n    return null; // Nachricht nicht zurückgeben\n}\n",
              "outputs": 1,
              "timeout": "",
              "noerr": 0,
              "initialize": "",
              "finalize": "",
              "libs": [],
              "x": 620,
              "y": 260,
              "wires": [
                  [
                      "f1c40d8b.b6d9e"
                  ]
              ]
          },
          {
              "id": "c1d9777a0b7e722d",
              "type": "switch",
              "z": "db744027d9c55da8",
              "name": "Lampensteuerung",
              "property": "payload.lamp",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "eq",
                      "v": "0",
                      "vt": "num"
                  },
                  {
                      "t": "eq",
                      "v": "1",
                      "vt": "num"
                  },
                  {
                      "t": "eq",
                      "v": "2",
                      "vt": "num"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 3,
              "x": 1210,
              "y": 260,
              "wires": [
                  [
                      "acd34ee251bf299d"
                  ],
                  [
                      "1a1e642005d4f084"
                  ],
                  [
                      "d56321d052bed130"
                  ]
              ]
          },
          {
              "id": "acd34ee251bf299d",
              "type": "change",
              "z": "db744027d9c55da8",
              "name": "Status für Lampe 1",
              "rules": [
                  {
                      "t": "set",
                      "p": "payload",
                      "pt": "msg",
                      "to": "payload.state",
                      "tot": "msg"
                  }
              ],
              "action": "",
              "property": "",
              "x": 1570,
              "y": 260,
              "wires": [
                  [
                      "97f2e503ce554a63"
                  ]
              ]
          },
          {
              "id": "97f2e503ce554a63",
              "type": "ui-led",
              "z": "db744027d9c55da8",
              "name": "Lampe 11",
              "group": "eae2e6e4e2b30e79",
              "order": 3,
              "width": 0,
              "height": 0,
              "label": "Lampe 11",
              "labelPlacement": "left",
              "labelAlignment": "flex-end",
              "states": [
                  {
                      "value": "ON",
                      "valueType": "str",
                      "color": "#ffff00"
                  },
                  {
                      "value": "OFF",
                      "valueType": "str",
                      "color": "#808000"
                  }
              ],
              "shape": "square",
              "showBorder": true,
              "showGlow": true,
              "x": 1960,
              "y": 260,
              "wires": []
          },
          {
              "id": "1a1e642005d4f084",
              "type": "change",
              "z": "db744027d9c55da8",
              "name": "Status für Lampe 2",
              "rules": [
                  {
                      "t": "set",
                      "p": "payload",
                      "pt": "msg",
                      "to": "payload.state",
                      "tot": "msg"
                  }
              ],
              "action": "",
              "property": "",
              "x": 1570,
              "y": 320,
              "wires": [
                  [
                      "9f4c1f52e7edc3cc"
                  ]
              ]
          },
          {
              "id": "d56321d052bed130",
              "type": "change",
              "z": "db744027d9c55da8",
              "name": "Status für Lampe 3",
              "rules": [
                  {
                      "t": "set",
                      "p": "payload",
                      "pt": "msg",
                      "to": "payload.state",
                      "tot": "msg"
                  }
              ],
              "action": "",
              "property": "",
              "x": 1570,
              "y": 380,
              "wires": [
                  [
                      "3412a2106c836d52"
                  ]
              ]
          },
          {
              "id": "9f4c1f52e7edc3cc",
              "type": "ui-led",
              "z": "db744027d9c55da8",
              "name": "Lampe 12",
              "group": "eae2e6e4e2b30e79",
              "order": 4,
              "width": 0,
              "height": 0,
              "label": "Lampe 12",
              "labelPlacement": "left",
              "labelAlignment": "flex-end",
              "states": [
                  {
                      "value": "ON",
                      "valueType": "str",
                      "color": "#ffff00"
                  },
                  {
                      "value": "OFF",
                      "valueType": "str",
                      "color": "#808000"
                  }
              ],
              "shape": "square",
              "showBorder": true,
              "showGlow": true,
              "x": 1960,
              "y": 320,
              "wires": []
          },
          {
              "id": "3412a2106c836d52",
              "type": "ui-led",
              "z": "db744027d9c55da8",
              "name": "Lampe 13",
              "group": "eae2e6e4e2b30e79",
              "order": 5,
              "width": 0,
              "height": 0,
              "label": "Lampe 13",
              "labelPlacement": "left",
              "labelAlignment": "flex-end",
              "states": [
                  {
                      "value": "ON",
                      "valueType": "str",
                      "color": "#ffff00"
                  },
                  {
                      "value": "OFF",
                      "valueType": "str",
                      "color": "#808000"
                  }
              ],
              "shape": "square",
              "showBorder": true,
              "showGlow": true,
              "x": 1960,
              "y": 380,
              "wires": []
          },
          {
              "id": "f1c40d8b.b6d9e",
              "type": "split",
              "z": "db744027d9c55da8",
              "name": "Split Lampenstatus",
              "splt": "\\n",
              "spltType": "auto",
              "arraySplt": "1",
              "arraySpltType": "len",
              "stream": false,
              "addname": "",
              "property": "payload",
              "x": 890,
              "y": 260,
              "wires": [
                  [
                      "c1d9777a0b7e722d"
                  ]
              ]
          },
          {
              "id": "9571faaa2cace06b",
              "type": "function",
              "z": "db744027d9c55da8",
              "name": "Uhrzeit prüfen",
              "func": "const currentTime = new Date();\nconst hours = currentTime.getHours();\n\nif (hours >= 18 && hours < 23) {\n    // Zwischen 18 und 23 Uhr\n    msg.payload = \"Lampen einschalten\"; // oder eine spezifische Steuerung für die Lampen\n} else {\n    // Außerhalb der erlaubten Zeiten\n    msg.payload = \"Lampen ausschalten\"; // oder eine spezifische Steuerung für die Lampen\n}\n\nreturn msg;\n",
              "outputs": 1,
              "timeout": 0,
              "noerr": 0,
              "initialize": "",
              "finalize": "",
              "libs": [],
              "x": 620,
              "y": 360,
              "wires": [
                  []
              ]
          },
          {
              "id": "cc2b6675dc1a6ce3",
              "type": "ui-switch",
              "z": "db744027d9c55da8",
              "name": "",
              "label": "switch",
              "group": "eae2e6e4e2b30e79",
              "order": 0,
              "width": 0,
              "height": 0,
              "passthru": false,
              "decouple": false,
              "topic": "payload",
              "topicType": "msg",
              "style": "",
              "className": "",
              "layout": "row-spread",
              "clickableArea": "switch",
              "onvalue": "{\"simulation\": true}",
              "onvalueType": "json",
              "onicon": "",
              "oncolor": "",
              "offvalue": "{\"simulation\": false}",
              "offvalueType": "json",
              "officon": "",
              "offcolor": "",
              "x": 310,
              "y": 160,
              "wires": [
                  [
                      "cddee6fc22707fa6"
                  ]
              ]
          },
          {
              "id": "eae2e6e4e2b30e79",
              "type": "ui-group",
              "name": "Group 1",
              "page": "a3e6081f6177718a",
              "width": "2",
              "height": 1,
              "order": 1,
              "showTitle": true,
              "className": "",
              "visible": "true",
              "disabled": "false",
              "groupType": "default"
          },
          {
              "id": "a3e6081f6177718a",
              "type": "ui-page",
              "name": "Page 1",
              "ui": "e0f1fa3c5c6ad564",
              "path": "/page1",
              "icon": "home",
              "layout": "grid",
              "theme": "8077bd265499d558",
              "breakpoints": [
                  {
                      "name": "Default",
                      "px": "0",
                      "cols": "3"
                  },
                  {
                      "name": "Tablet",
                      "px": "576",
                      "cols": "6"
                  },
                  {
                      "name": "Small Desktop",
                      "px": "768",
                      "cols": "9"
                  },
                  {
                      "name": "Desktop",
                      "px": "1024",
                      "cols": "12"
                  }
              ],
              "order": 1,
              "className": "",
              "visible": "true",
              "disabled": "false"
          },
          {
              "id": "e0f1fa3c5c6ad564",
              "type": "ui-base",
              "name": "My Dashboard",
              "path": "/dashboard",
              "appIcon": "",
              "includeClientData": true,
              "acceptsClientConfig": [
                  "ui-notification",
                  "ui-control"
              ],
              "showPathInSidebar": false,
              "headerContent": "page",
              "navigationStyle": "default",
              "titleBarStyle": "default",
              "showReconnectNotification": true,
              "notificationDisplayTime": 1,
              "showDisconnectNotification": true,
              "allowInstall": true
          },
          {
              "id": "8077bd265499d558",
              "type": "ui-theme",
              "name": "Default Theme",
              "colors": {
                  "surface": "#ffffff",
                  "primary": "#0094CE",
                  "bgPage": "#eeeeee",
                  "groupBg": "#ffffff",
                  "groupOutline": "#cccccc"
              },
              "sizes": {
                  "density": "default",
                  "pagePadding": "12px",
                  "groupGap": "12px",
                  "groupBorderRadius": "4px",
                  "widgetGap": "12px"
              }
          },
          {
              "id": "1bc863875cde0fe8",
              "type": "global-config",
              "env": [],
              "modules": {
                  "@flowfuse/node-red-dashboard-2-ui-led": "1.1.0",
                  "@flowfuse/node-red-dashboard": "1.26.0"
              }
          }
      ]
      
      mickym 1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO last edited by

        @mark_in-dark

        hier hat @mickym mal AND und OR beschrieben
        https://forum.iobroker.net/topic/51180/boolean-logic-problem/5?_=1756650577534

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

          @mark_in-dark Also entweder Du prüfst diverse Eigenschaften eines Nachrichtenobjektes ab, dann kannst Du Change oder function Nodes machen oder wenn Du externe Bedingungen nehmen willst, wie Uhrzeit nimmst, dann prüfst du die innerhalb des Flows ab. Wenn Du bestimmte Schalter zusätzlich abprüfen willst, machst Du das auch in dem Flow oder speicherst den Status im Kontext.

          f2b13b50-94c7-47e5-8473-884746ba4115-image.png

          Wenn Du also die Uhrzeit abprüfen willst, dann musst Du es halt in den Flow hängen - wenn Du die Nodes parallel machst dann ist es wie eine ODER Bedingung. Ich würde generell keine function Nodes verwenden, wenn möglich.

          Oder mit anderen Worten auf die Überschrift angewandt: Du musst halt vor die function Node eine Node setzen, die den Flow blockiert, sodass die function Node gar nicht mehr angesteuert wird.

          M 1 Reply Last reply Reply Quote 0
          • M
            mark_in dark @mickym last edited by

            @mickym
            Danke für die Antwort.
            Auch wenn ich gerade noch nicht konkret duchblicke, muss ich wohl noch etwas Grundlagenforschung machen, obwohl ich eher ein einmaliges Projekt habe und darum nicht zu viel Zeit in die Einarbeitung in Node-Red stecken möchte.

            function-Node finde ich eigentlich praktisch, denn da hätte ich in den einen noch mehr hineingepackt, eben auch die Uhrzeitabfrage. Warum man functions-nodes nicht unbedingt verwenden soll, verstehe ich gerade nicht.

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @mark_in dark last edited by

              @mark_in-dark

              weil du dann node-red nicht benötigst, sondern einfach nur javascript schreibst und das dann direkt im javascript adapter ausführen könntest.

              node-red ist ja eher eine no-code (evtl low-code) Umgebung.
              die function node ist eher die notlösung um lücken zu füllen, die node-red nicht unterstützt oder es keine nodes zum nachinstallieren gibt.

              die grafische nachvollziehbarkeit von abläufen geht dann auch verloren.

              M 1 Reply Last reply Reply Quote 1
              • M
                mark_in dark @OliverIO last edited by

                @oliverio
                ja da hast du auch wieder recht. Sehe aber in Node-Red den Vorteil, dass ich ein Lauzeitplattform, eine Webseite habe und meine KNX-Anbindung fertig funktionsfähig ist.
                Kann meine Gewünschte Anwesenheitssimulation gerne mit grafischen Nodes machen. Bin froh im irgendwelche Tipps. Vielleicht wäre eine andere Lösung als Node-Red besser geeignet für mein Vorhaben?

                OliverIO 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @mark_in dark last edited by

                  @mark_in-dark

                  daher solltest.
                  KNX funktioniert ja im iobroker grundsätzlich auch, aber halt mit entsprechenden Lizenzbeschränkungen.
                  Keine node-red Polizei wird dir das verbieten 😉

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    mark_in dark @OliverIO last edited by

                    @oliverio
                    Danke, iobroker kenne ich noch weniger, Du meinst damit wäre es einfacher meine Wünsch zu erfüllen, darf ruhige etwas kosten...

                    OliverIO 1 Reply Last reply Reply Quote 0
                    • OliverIO
                      OliverIO @mark_in dark last edited by

                      @mark_in-dark

                      du kannst ja mal probeweise installieren
                      https://github.com/ioBroker/ioBroker.knx?tab=readme-ov-file#license-requirements

                      bis zu einer grenze ist er kostenlos

                      dann noch den javascript adapter dazu
                      https://github.com/ioBroker/ioBroker.javascript

                      ich selbst habe kein knx. daher weiß ich nicht was wirklich einfacher ist

                      M 1 Reply Last reply Reply Quote 0
                      • M
                        mark_in dark @OliverIO last edited by

                        @OliverIO

                        Super! Herzlichen Dank, ich schaue es mir mal an.
                        Schönen Abend!

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        788
                        Online

                        32.0k
                        Users

                        80.5k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        134
                        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