Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. If Funktion ( Gelöst )

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

If Funktion ( Gelöst )

Geplant Angeheftet Gesperrt Verschoben Node-Red
13 Beiträge 3 Kommentatoren 621 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Offline
    D Offline
    Dexxter
    schrieb am zuletzt editiert von Dexxter
    #1

    Moin,
    ich habe mal eine Frage zu der "Funktion" Node.
    Mein Plan ist ein ganz einfacher.....
    Ich möchte einen Zigbee Aktor schalten wenn 2 Vorraussetzungen getroffen sind.

    1. Fernsehreceiver nicht in Standby
    2. Es ist dunkel.

    Für zweitens habe ich mir im Homatic ein Zeit programm erstellt welches true/false für Nacht raus gibt.
    Also habe ich im iobroker 2 Datenpunkte.
    Einmal die ID "hm-rega.0.1428" (Nacht)
    und die ID "enigma2.0.enigma2.STANDBY"

    Jetzt möchte ich wenn hm-rega.0.1428=true
    UND
    enigma2.0.enigma2.STANDBY=false
    mit der Funktion eine 0 ausgeben.
    Meine Funktion sieht wie folgt aus:

    var t1 = { payload:"hm-rega.0.1428" };
    var t2 = { payload:"enigma2.0.enigma2.STANDBY" };
    if (t1 == "true" && t2 == "false")
    {
    (msg.payload = '0');
    }
    else {
    (msg.payload = 'hallo');
    }
    return msg;
    

    Das Problem ist das egal wie die beiden Datenpunkte stehen immer "hallo" ausgegeben wird.
    Kann mir da mal einer auf die Sprünge helfen?
    Danke
    Greetz Dexxter

    liv-in-skyL mickymM 2 Antworten Letzte Antwort
    0
    • D Dexxter

      Moin,
      ich habe mal eine Frage zu der "Funktion" Node.
      Mein Plan ist ein ganz einfacher.....
      Ich möchte einen Zigbee Aktor schalten wenn 2 Vorraussetzungen getroffen sind.

      1. Fernsehreceiver nicht in Standby
      2. Es ist dunkel.

      Für zweitens habe ich mir im Homatic ein Zeit programm erstellt welches true/false für Nacht raus gibt.
      Also habe ich im iobroker 2 Datenpunkte.
      Einmal die ID "hm-rega.0.1428" (Nacht)
      und die ID "enigma2.0.enigma2.STANDBY"

      Jetzt möchte ich wenn hm-rega.0.1428=true
      UND
      enigma2.0.enigma2.STANDBY=false
      mit der Funktion eine 0 ausgeben.
      Meine Funktion sieht wie folgt aus:

      var t1 = { payload:"hm-rega.0.1428" };
      var t2 = { payload:"enigma2.0.enigma2.STANDBY" };
      if (t1 == "true" && t2 == "false")
      {
      (msg.payload = '0');
      }
      else {
      (msg.payload = 'hallo');
      }
      return msg;
      

      Das Problem ist das egal wie die beiden Datenpunkte stehen immer "hallo" ausgegeben wird.
      Kann mir da mal einer auf die Sprünge helfen?
      Danke
      Greetz Dexxter

      liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      schrieb am zuletzt editiert von
      #2

      @dexxter

      braucht man die anführungszeichen bei true und false - ist ein boolean - du vergleichst aber strings auf "true"

      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

      D 1 Antwort Letzte Antwort
      0
      • D Dexxter

        Moin,
        ich habe mal eine Frage zu der "Funktion" Node.
        Mein Plan ist ein ganz einfacher.....
        Ich möchte einen Zigbee Aktor schalten wenn 2 Vorraussetzungen getroffen sind.

        1. Fernsehreceiver nicht in Standby
        2. Es ist dunkel.

        Für zweitens habe ich mir im Homatic ein Zeit programm erstellt welches true/false für Nacht raus gibt.
        Also habe ich im iobroker 2 Datenpunkte.
        Einmal die ID "hm-rega.0.1428" (Nacht)
        und die ID "enigma2.0.enigma2.STANDBY"

        Jetzt möchte ich wenn hm-rega.0.1428=true
        UND
        enigma2.0.enigma2.STANDBY=false
        mit der Funktion eine 0 ausgeben.
        Meine Funktion sieht wie folgt aus:

        var t1 = { payload:"hm-rega.0.1428" };
        var t2 = { payload:"enigma2.0.enigma2.STANDBY" };
        if (t1 == "true" && t2 == "false")
        {
        (msg.payload = '0');
        }
        else {
        (msg.payload = 'hallo');
        }
        return msg;
        

        Das Problem ist das egal wie die beiden Datenpunkte stehen immer "hallo" ausgegeben wird.
        Kann mir da mal einer auf die Sprünge helfen?
        Danke
        Greetz Dexxter

        mickymM Offline
        mickymM Offline
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #3

        @dexxter Es ist schade, dass Du alles mit function Nodes machst - anstelle die Mächtigkeit von NodeRed als grafisches Logiktool zu nutzen, aber wie mein Vorgänger schon schrieb, vergleichst Du Strings.

        Da die Objekte t1 und t2 nie leer werden, ist das auch keine sinnvolle Abfrage.

        Also wie jetzt immer hallo ausgegeben wird, wird sonst halt immer 0 ausgegeben.

        if (t1 && t2){
        }
        

        wäre schon der Vergleich aber wäre immer richtig, da Du beide Objekte t1 und t2 gefüllt hast.

        Ich würde lieber versuchen ohne function Nodes auszukommen, wenn Du die Vorteile von NodeRed geniessen willst.

        Ich habe da eine tolle Logiknode mir selbst gebastelt. Im Übrigen wird Deine Function NOde nie funktionieren, da die Nachrichten nicht gleichzeitig kommen. Es wäre für den Anfang sinnvoll, dass über eine Flow Variable zu lösen. Wenn Du unbedingt eine Function Node verwenden willst, musst Du den jeweils andern Datenpunkt im Kontext speichern - oder Du nimmst einfach den Flow und liest jeweils den Status des jeweils anderen Datenpunktes aus. So wird es jedenfalls nie funktionieren!!!

        Erzeugen den beide Datenpunkte ein true, wenn
        hm-rega.0.1428
        enigma2.0.enigma2.STANDBY

        es Nacht ist (hm-rega.0.1428 ) und enigma2.0.enigma2.STANDBY nict in Standby ist?

        So würde ein Flow aussehen:

        8cdded6b-3457-4e9d-a32f-63a13a9295a5-image.png

        [
            {
                "id": "8b91826f.41eab",
                "type": "ioBroker in",
                "z": "54b226bc.0793e8",
                "name": "enigma2.0.enigma2.STANDBY",
                "topic": "enigma2.0.enigma2.STANDBY",
                "payloadType": "value",
                "onlyack": "",
                "func": "all",
                "gap": "",
                "fireOnStart": "false",
                "x": 210,
                "y": 3320,
                "wires": [
                    [
                        "852d5f8f.f2d1c"
                    ]
                ]
            },
            {
                "id": "852d5f8f.f2d1c",
                "type": "switch",
                "z": "54b226bc.0793e8",
                "name": "Nicht in Standby (=false)",
                "property": "payload",
                "propertyType": "msg",
                "rules": [
                    {
                        "t": "false"
                    }
                ],
                "checkall": "true",
                "repair": false,
                "outputs": 1,
                "x": 490,
                "y": 3320,
                "wires": [
                    [
                        "d3bcb30f.ce39b"
                    ]
                ]
            },
            {
                "id": "d3bcb30f.ce39b",
                "type": "ioBroker get",
                "z": "54b226bc.0793e8",
                "name": "",
                "topic": "hm-rega.0.1428",
                "attrname": "nacht",
                "payloadType": "value",
                "x": 720,
                "y": 3320,
                "wires": [
                    [
                        "1d76b4f7.8dc97b"
                    ]
                ]
            },
            {
                "id": "1d76b4f7.8dc97b",
                "type": "switch",
                "z": "54b226bc.0793e8",
                "name": "ist Nacht?",
                "property": "nacht",
                "propertyType": "msg",
                "rules": [
                    {
                        "t": "true"
                    }
                ],
                "checkall": "true",
                "repair": false,
                "outputs": 1,
                "x": 900,
                "y": 3320,
                "wires": [
                    [
                        "cc09d021.9737d"
                    ]
                ]
            },
            {
                "id": "cc09d021.9737d",
                "type": "ioBroker out",
                "z": "54b226bc.0793e8",
                "name": "schalte Zigbee Device",
                "topic": "",
                "ack": "false",
                "autoCreate": "false",
                "stateName": "",
                "role": "",
                "payloadType": "",
                "readonly": "",
                "stateUnit": "",
                "stateMin": "",
                "stateMax": "",
                "x": 1100,
                "y": 3320,
                "wires": []
            }
        ]
        

        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

        1 Antwort Letzte Antwort
        0
        • liv-in-skyL liv-in-sky

          @dexxter

          braucht man die anführungszeichen bei true und false - ist ein boolean - du vergleichst aber strings auf "true"

          D Offline
          D Offline
          Dexxter
          schrieb am zuletzt editiert von
          #4

          @liv-in-sky
          Danke, das war ein wichtiger Hinweis.
          Ich denke ich hab da die Grundlagen der Funktion noch nicht ganz verstanden.

          @mickym
          Tatsächlich habe ich das jetzt komplett grafisch umgesetzt und das funtioniert auch wie gewünscht.
          Aber könntest Du mir mal ein funktionierendes Beispiel einer Funktion geben?
          Das dient mir dann hauptsächlich zum Verständnis denn ich möchte da fitter werden.
          So hab ich das jetzt gelöst und werde es auch so lassen.
          Ich hab es noch da hin gehend erweitert das der Vorhang auf geht wenn der Receiver in Standby geht.
          Nur möchte ich die Funktionen besser verstehen.
          Danke für den Hinweis
          2022-01-22 17_59_05-Node-RED _ 192.168.178.14 – Opera.jpg

          mickymM liv-in-skyL 2 Antworten Letzte Antwort
          0
          • D Dexxter

            @liv-in-sky
            Danke, das war ein wichtiger Hinweis.
            Ich denke ich hab da die Grundlagen der Funktion noch nicht ganz verstanden.

            @mickym
            Tatsächlich habe ich das jetzt komplett grafisch umgesetzt und das funtioniert auch wie gewünscht.
            Aber könntest Du mir mal ein funktionierendes Beispiel einer Funktion geben?
            Das dient mir dann hauptsächlich zum Verständnis denn ich möchte da fitter werden.
            So hab ich das jetzt gelöst und werde es auch so lassen.
            Ich hab es noch da hin gehend erweitert das der Vorhang auf geht wenn der Receiver in Standby geht.
            Nur möchte ich die Funktionen besser verstehen.
            Danke für den Hinweis
            2022-01-22 17_59_05-Node-RED _ 192.168.178.14 – Opera.jpg

            mickymM Offline
            mickymM Offline
            mickym
            Most Active
            schrieb am zuletzt editiert von mickym
            #5

            @dexxter Ok wenn Du es über eine Function Node machen willst, musst Du aber trotzdem die verschiedenen topic in einem Kontext sammeln.

            Also entweder Du sammelst alles in einer Flow Variable oder Du sammelst die Eigenschaften in unterschiedlichen Eigenschaften des Nachrichten objektes. Im unteren Fall habe ich der iobroker get Node aus Deiner homematic NOde die Eigenschaft nacht zugewiesen. Damit kannst die payload mit nacht vergleichen.

            if (!msg.payload && msg.nacht) msg.payload = true; else msg.payload =false;
            return msg;
            

            einfacher geht es hier mit der konditionellen Zuweisung:

            msg.payload = !msg.payload && msg.nacht ? true : false;
            return msg;
            

            [
               {
                   "id": "5fe7ca.80bba838",
                   "type": "inject",
                   "z": "54b226bc.0793e8",
                   "name": "true und nacht",
                   "props": [
                       {
                           "p": "payload"
                       },
                       {
                           "p": "nacht",
                           "v": "true",
                           "vt": "bool"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "payload": "true",
                   "payloadType": "bool",
                   "x": 610,
                   "y": 3440,
                   "wires": [
                       [
                           "46515dea.7e01e4"
                       ]
                   ]
               },
               {
                   "id": "46515dea.7e01e4",
                   "type": "function",
                   "z": "54b226bc.0793e8",
                   "name": "",
                   "func": "\n//if (!msg.payload && msg.nacht) msg.payload = true;else msg.payload =false;\n\nmsg.payload = !msg.payload && msg.nacht ? true : false;\nreturn msg;",
                   "outputs": 1,
                   "noerr": 0,
                   "initialize": "",
                   "finalize": "",
                   "libs": [],
                   "x": 800,
                   "y": 3460,
                   "wires": [
                       [
                           "6f5405c7.b53f8c"
                       ]
                   ]
               },
               {
                   "id": "6f5405c7.b53f8c",
                   "type": "debug",
                   "z": "54b226bc.0793e8",
                   "name": "",
                   "active": true,
                   "tosidebar": true,
                   "console": false,
                   "tostatus": false,
                   "complete": "false",
                   "statusVal": "",
                   "statusType": "auto",
                   "x": 980,
                   "y": 3460,
                   "wires": []
               },
               {
                   "id": "91058537.b5a708",
                   "type": "inject",
                   "z": "54b226bc.0793e8",
                   "name": "false und nacht",
                   "props": [
                       {
                           "p": "payload"
                       },
                       {
                           "p": "nacht",
                           "v": "true",
                           "vt": "bool"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "payload": "false",
                   "payloadType": "bool",
                   "x": 600,
                   "y": 3480,
                   "wires": [
                       [
                           "46515dea.7e01e4"
                       ]
                   ]
               }
            ]
            

            20497860-3bab-4209-818b-9b1e9c8e65c5-image.png

            Wenn Du es in der Function Node sammeln willst, wie ich anhand Deiner Topic entnehmen und im Prinzip das Node Red Konzept ad absurdum führen möchtest geht das auch ....

            Ich nehme nur der Einfachheit mal Inject Nodes.

            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

            D 1 Antwort Letzte Antwort
            0
            • D Dexxter

              @liv-in-sky
              Danke, das war ein wichtiger Hinweis.
              Ich denke ich hab da die Grundlagen der Funktion noch nicht ganz verstanden.

              @mickym
              Tatsächlich habe ich das jetzt komplett grafisch umgesetzt und das funtioniert auch wie gewünscht.
              Aber könntest Du mir mal ein funktionierendes Beispiel einer Funktion geben?
              Das dient mir dann hauptsächlich zum Verständnis denn ich möchte da fitter werden.
              So hab ich das jetzt gelöst und werde es auch so lassen.
              Ich hab es noch da hin gehend erweitert das der Vorhang auf geht wenn der Receiver in Standby geht.
              Nur möchte ich die Funktionen besser verstehen.
              Danke für den Hinweis
              2022-01-22 17_59_05-Node-RED _ 192.168.178.14 – Opera.jpg

              liv-in-skyL Offline
              liv-in-skyL Offline
              liv-in-sky
              schrieb am zuletzt editiert von
              #6

              @dexxter bei @mickym bist du ja in guten händen - da wird der flow bald "flutschen"

              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

              1 Antwort Letzte Antwort
              1
              • mickymM mickym

                @dexxter Ok wenn Du es über eine Function Node machen willst, musst Du aber trotzdem die verschiedenen topic in einem Kontext sammeln.

                Also entweder Du sammelst alles in einer Flow Variable oder Du sammelst die Eigenschaften in unterschiedlichen Eigenschaften des Nachrichten objektes. Im unteren Fall habe ich der iobroker get Node aus Deiner homematic NOde die Eigenschaft nacht zugewiesen. Damit kannst die payload mit nacht vergleichen.

                if (!msg.payload && msg.nacht) msg.payload = true; else msg.payload =false;
                return msg;
                

                einfacher geht es hier mit der konditionellen Zuweisung:

                msg.payload = !msg.payload && msg.nacht ? true : false;
                return msg;
                

                [
                   {
                       "id": "5fe7ca.80bba838",
                       "type": "inject",
                       "z": "54b226bc.0793e8",
                       "name": "true und nacht",
                       "props": [
                           {
                               "p": "payload"
                           },
                           {
                               "p": "nacht",
                               "v": "true",
                               "vt": "bool"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "",
                       "payload": "true",
                       "payloadType": "bool",
                       "x": 610,
                       "y": 3440,
                       "wires": [
                           [
                               "46515dea.7e01e4"
                           ]
                       ]
                   },
                   {
                       "id": "46515dea.7e01e4",
                       "type": "function",
                       "z": "54b226bc.0793e8",
                       "name": "",
                       "func": "\n//if (!msg.payload && msg.nacht) msg.payload = true;else msg.payload =false;\n\nmsg.payload = !msg.payload && msg.nacht ? true : false;\nreturn msg;",
                       "outputs": 1,
                       "noerr": 0,
                       "initialize": "",
                       "finalize": "",
                       "libs": [],
                       "x": 800,
                       "y": 3460,
                       "wires": [
                           [
                               "6f5405c7.b53f8c"
                           ]
                       ]
                   },
                   {
                       "id": "6f5405c7.b53f8c",
                       "type": "debug",
                       "z": "54b226bc.0793e8",
                       "name": "",
                       "active": true,
                       "tosidebar": true,
                       "console": false,
                       "tostatus": false,
                       "complete": "false",
                       "statusVal": "",
                       "statusType": "auto",
                       "x": 980,
                       "y": 3460,
                       "wires": []
                   },
                   {
                       "id": "91058537.b5a708",
                       "type": "inject",
                       "z": "54b226bc.0793e8",
                       "name": "false und nacht",
                       "props": [
                           {
                               "p": "payload"
                           },
                           {
                               "p": "nacht",
                               "v": "true",
                               "vt": "bool"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "",
                       "payload": "false",
                       "payloadType": "bool",
                       "x": 600,
                       "y": 3480,
                       "wires": [
                           [
                               "46515dea.7e01e4"
                           ]
                       ]
                   }
                ]
                

                20497860-3bab-4209-818b-9b1e9c8e65c5-image.png

                Wenn Du es in der Function Node sammeln willst, wie ich anhand Deiner Topic entnehmen und im Prinzip das Node Red Konzept ad absurdum führen möchtest geht das auch ....

                Ich nehme nur der Einfachheit mal Inject Nodes.

                D Offline
                D Offline
                Dexxter
                schrieb am zuletzt editiert von
                #7

                @mickym

                Ich dachte ernsthaft das es übersichtlicher wäre wenn man das mit einer Funktion realisiert.
                Aber so wie es nun ist kann man natürlich auf den ersten Blick sehen was da los ist.:+1:

                Zum Verständnis.....
                Wie müsste ich denn die verschiedenen Variablen sammeln und die sieht so eine Flow Variable aus?
                Bin da noch nicht soooo lange und tief im Thema und will auf jeden Fall besser werden.
                Hab jetzt nochmal den Flow ein wenig geändert aber so kann er bleiben.
                nr.jpg

                mickymM 1 Antwort Letzte Antwort
                0
                • D Dexxter

                  @mickym

                  Ich dachte ernsthaft das es übersichtlicher wäre wenn man das mit einer Funktion realisiert.
                  Aber so wie es nun ist kann man natürlich auf den ersten Blick sehen was da los ist.:+1:

                  Zum Verständnis.....
                  Wie müsste ich denn die verschiedenen Variablen sammeln und die sieht so eine Flow Variable aus?
                  Bin da noch nicht soooo lange und tief im Thema und will auf jeden Fall besser werden.
                  Hab jetzt nochmal den Flow ein wenig geändert aber so kann er bleiben.
                  nr.jpg

                  mickymM Offline
                  mickymM Offline
                  mickym
                  Most Active
                  schrieb am zuletzt editiert von
                  #8

                  @dexxter Ich zeig Dir gleich noch die Varianten. Die beiden standby Nodes am Anfang kannst DU auch durch EINE ersetzen. ;)

                  Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                  D 1 Antwort Letzte Antwort
                  1
                  • mickymM mickym

                    @dexxter Ich zeig Dir gleich noch die Varianten. Die beiden standby Nodes am Anfang kannst DU auch durch EINE ersetzen. ;)

                    D Offline
                    D Offline
                    Dexxter
                    schrieb am zuletzt editiert von
                    #9

                    @mickym
                    Erledigt:blush:

                    nr2.jpg

                    Bin echt gespannt auf die beiden Varianten aber ich danke Dir bis hierhin schon mal sehr.

                    mickymM 1 Antwort Letzte Antwort
                    0
                    • D Dexxter

                      @mickym
                      Erledigt:blush:

                      nr2.jpg

                      Bin echt gespannt auf die beiden Varianten aber ich danke Dir bis hierhin schon mal sehr.

                      mickymM Offline
                      mickymM Offline
                      mickym
                      Most Active
                      schrieb am zuletzt editiert von
                      #10

                      @dexxter So hier die erste Variante mit der Flow Variable - ohne Function Nodes.

                      Hier holst Du Dir nicht den Status Nacht oder den des Vorhangs zum Zeitpunkt des Triggerns des Standbys ab, sondern lässt zu Beginn bzw. bei Aktualisierung Flow Variablen setzen.

                      Wichtig für die Initialisierung ist, dass Du das ganze dann auch bei Flowstart Initialisieren lässt:

                      1456f369-196d-40d8-a2c3-fa6bff690f0f-image.png

                      Ich simuliere das mal mit Inject Nodes - Du solltest aber Deine iobroker IN Nodes nehmen. Um es einigermassen realistisch zu gestalten habe ich mal das topic von Deinem HM Punkt genommen, und bei Vorhang halt vorhang als topic.

                      85ed9af7-3e04-44f1-b8e4-cf68efd2a480-image.png

                      Die beiden Inject Nodes - initialisieren also Deine Flow variablen:

                      dd786f35-99ee-461c-897e-25980b9bae0d-image.png

                      im Kontextmenü siehst Du den Wert der Variablen:

                      af6f4137-7590-42dc-a533-c10251b0c361-image.png

                      Dieser enthält nun zeitunabhängig immer den aktuellen Zustand des Datenpunktes.

                      Im Flow kann man das nun im Switch nutzen:

                      636b2ce2-d5fe-4c1b-ad72-6def0623fef4-image.png

                      und nach dem Inhalt der Flow Variablen fragen:

                      5b086991-b6f2-44ac-8ed4-9527aae62abc-image.png

                      [
                         {
                             "id": "24ef5ce7.630b44",
                             "type": "inject",
                             "z": "54b226bc.0793e8",
                             "name": "",
                             "props": [
                                 {
                                     "p": "payload"
                                 },
                                 {
                                     "p": "topic",
                                     "vt": "str"
                                 }
                             ],
                             "repeat": "",
                             "crontab": "",
                             "once": false,
                             "onceDelay": 0.1,
                             "topic": "enigma2.0.enigma2.STANDBY",
                             "payload": "true",
                             "payloadType": "bool",
                             "x": 380,
                             "y": 3520,
                             "wires": [
                                 [
                                     "1b555ccb.4edf03"
                                 ]
                             ]
                         },
                         {
                             "id": "5e730141.0f7f5",
                             "type": "inject",
                             "z": "54b226bc.0793e8",
                             "name": "",
                             "props": [
                                 {
                                     "p": "payload"
                                 },
                                 {
                                     "p": "topic",
                                     "vt": "str"
                                 }
                             ],
                             "repeat": "",
                             "crontab": "",
                             "once": false,
                             "onceDelay": 0.1,
                             "topic": "hm-rega.0.1428",
                             "payload": "true",
                             "payloadType": "bool",
                             "x": 370,
                             "y": 3660,
                             "wires": [
                                 [
                                     "99c86e9.3dcdb9"
                                 ]
                             ]
                         },
                         {
                             "id": "aaa7add6.abf31",
                             "type": "inject",
                             "z": "54b226bc.0793e8",
                             "name": "",
                             "props": [
                                 {
                                     "p": "payload"
                                 },
                                 {
                                     "p": "topic",
                                     "vt": "str"
                                 }
                             ],
                             "repeat": "",
                             "crontab": "",
                             "once": false,
                             "onceDelay": 0.1,
                             "topic": "enigma2.0.enigma2.STANDBY",
                             "payload": "false",
                             "payloadType": "bool",
                             "x": 380,
                             "y": 3560,
                             "wires": [
                                 [
                                     "1b555ccb.4edf03"
                                 ]
                             ]
                         },
                         {
                             "id": "1b555ccb.4edf03",
                             "type": "switch",
                             "z": "54b226bc.0793e8",
                             "name": "Standby",
                             "property": "payload",
                             "propertyType": "msg",
                             "rules": [
                                 {
                                     "t": "false"
                                 },
                                 {
                                     "t": "true"
                                 }
                             ],
                             "checkall": "true",
                             "repair": false,
                             "outputs": 2,
                             "x": 620,
                             "y": 3540,
                             "wires": [
                                 [
                                     "d258615a.51943"
                                 ],
                                 [
                                     "e274ffd1.943e"
                                 ]
                             ]
                         },
                         {
                             "id": "579a5722.021ef8",
                             "type": "inject",
                             "z": "54b226bc.0793e8",
                             "name": "",
                             "props": [
                                 {
                                     "p": "payload"
                                 },
                                 {
                                     "p": "topic",
                                     "vt": "str"
                                 }
                             ],
                             "repeat": "",
                             "crontab": "",
                             "once": false,
                             "onceDelay": 0.1,
                             "topic": "vorhang",
                             "payload": "100",
                             "payloadType": "num",
                             "x": 390,
                             "y": 3720,
                             "wires": [
                                 [
                                     "13ddc9da.dbc906"
                                 ]
                             ]
                         },
                         {
                             "id": "1cf82ec2.18b871",
                             "type": "change",
                             "z": "54b226bc.0793e8",
                             "name": "Vorhang zu",
                             "rules": [
                                 {
                                     "t": "set",
                                     "p": "payload",
                                     "pt": "msg",
                                     "to": "0",
                                     "tot": "num"
                                 }
                             ],
                             "action": "",
                             "property": "",
                             "from": "",
                             "to": "",
                             "reg": false,
                             "x": 1010,
                             "y": 3500,
                             "wires": [
                                 [
                                     "5a665566.b4804c"
                                 ]
                             ]
                         },
                         {
                             "id": "878ad8eb.f37b78",
                             "type": "comment",
                             "z": "54b226bc.0793e8",
                             "name": "mit Flow Variable",
                             "info": "",
                             "x": 200,
                             "y": 3460,
                             "wires": []
                         },
                         {
                             "id": "99c86e9.3dcdb9",
                             "type": "change",
                             "z": "54b226bc.0793e8",
                             "name": "",
                             "rules": [
                                 {
                                     "t": "set",
                                     "p": "nacht",
                                     "pt": "flow",
                                     "to": "payload",
                                     "tot": "msg"
                                 }
                             ],
                             "action": "",
                             "property": "",
                             "from": "",
                             "to": "",
                             "reg": false,
                             "x": 580,
                             "y": 3660,
                             "wires": [
                                 []
                             ]
                         },
                         {
                             "id": "13ddc9da.dbc906",
                             "type": "change",
                             "z": "54b226bc.0793e8",
                             "name": "",
                             "rules": [
                                 {
                                     "t": "set",
                                     "p": "vorhang",
                                     "pt": "flow",
                                     "to": "payload",
                                     "tot": "msg"
                                 }
                             ],
                             "action": "",
                             "property": "",
                             "from": "",
                             "to": "",
                             "reg": false,
                             "x": 590,
                             "y": 3720,
                             "wires": [
                                 []
                             ]
                         },
                         {
                             "id": "babc9a87.267ee8",
                             "type": "change",
                             "z": "54b226bc.0793e8",
                             "name": "Vorhang auf",
                             "rules": [
                                 {
                                     "t": "set",
                                     "p": "payload",
                                     "pt": "msg",
                                     "to": "100",
                                     "tot": "num"
                                 }
                             ],
                             "action": "",
                             "property": "",
                             "from": "",
                             "to": "",
                             "reg": false,
                             "x": 1010,
                             "y": 3560,
                             "wires": [
                                 [
                                     "5a665566.b4804c"
                                 ]
                             ]
                         },
                         {
                             "id": "d258615a.51943",
                             "type": "switch",
                             "z": "54b226bc.0793e8",
                             "name": "Nacht ?",
                             "property": "nacht",
                             "propertyType": "flow",
                             "rules": [
                                 {
                                     "t": "true"
                                 }
                             ],
                             "checkall": "true",
                             "repair": false,
                             "outputs": 1,
                             "x": 810,
                             "y": 3500,
                             "wires": [
                                 [
                                     "1cf82ec2.18b871"
                                 ]
                             ]
                         },
                         {
                             "id": "5a665566.b4804c",
                             "type": "ioBroker out",
                             "z": "54b226bc.0793e8",
                             "name": "schalte Zigbee Device",
                             "topic": "",
                             "ack": "false",
                             "autoCreate": "false",
                             "stateName": "",
                             "role": "",
                             "payloadType": "",
                             "readonly": "",
                             "stateUnit": "",
                             "stateMin": "",
                             "stateMax": "",
                             "x": 1220,
                             "y": 3520,
                             "wires": []
                         },
                         {
                             "id": "e274ffd1.943e",
                             "type": "switch",
                             "z": "54b226bc.0793e8",
                             "name": "Vorhang auf",
                             "property": "vorhang",
                             "propertyType": "flow",
                             "rules": [
                                 {
                                     "t": "gt",
                                     "v": "0",
                                     "vt": "num"
                                 }
                             ],
                             "checkall": "true",
                             "repair": false,
                             "outputs": 1,
                             "x": 810,
                             "y": 3560,
                             "wires": [
                                 [
                                     "babc9a87.267ee8"
                                 ]
                             ]
                         }
                      ]
                      

                      ... so und nun um Node Red wieder ad absurdum zu führen der "vereinfachte Flow" mit einer Function Node. Da solltest Du dann aber versuchen - gleich in JS zu programmieren. Da brauchst NodeRed nicht dafür - aber diese Version werde ich Dir trotzdem zeigen.

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      1 Antwort Letzte Antwort
                      0
                      • mickymM Offline
                        mickymM Offline
                        mickym
                        Most Active
                        schrieb am zuletzt editiert von mickym
                        #11

                        So nun die übersichtlichste bzw. unübersichtlichste Methode (da man von der Logik nichts mehr sieht) - aber dafür braucht man kein NodeRed. Ich hab nur mal mit den vielen Inject NOdes die Datenpunkte-States simuliert:

                        260ca6f3-aa1c-4de3-9ebe-9d8276b098ec-image.png

                        Man sieht sehr übersichtlich. :blush: Alles geht in eine Function NOde und es kómmt was raus oder auch nicht. Das Kontextmenü zeigt aber gleich die Variablen des Kontextes der Function Node, die man wieder brauchst um die Nachrichten, die ja nicht zeitgleich auftreffen miteinander zu vergleichen.

                        Also im Prinzip ersetzt der Kontext der function Node die Flow -Variablen.

                        Raus kommt dann ein payload mit 0 oder 100 - um Vorhang auf oder zu zumachen:

                        1d60501b-dbde-4fa2-ab69-73e9f64f434a-image.png

                        Als payload kommt dann halt 0 oder 100 raus, um den Vorhang zu schließen oder zu öffnen.

                        [
                           {
                               "id": "44d258c5.d12668",
                               "type": "inject",
                               "z": "54b226bc.0793e8",
                               "name": "",
                               "props": [
                                   {
                                       "p": "payload"
                                   },
                                   {
                                       "p": "topic",
                                       "vt": "str"
                                   }
                               ],
                               "repeat": "",
                               "crontab": "",
                               "once": false,
                               "onceDelay": 0.1,
                               "topic": "enigma2.0.enigma2.STANDBY",
                               "payload": "true",
                               "payloadType": "bool",
                               "x": 320,
                               "y": 3900,
                               "wires": [
                                   [
                                       "a3ec5934.8d08b8"
                                   ]
                               ]
                           },
                           {
                               "id": "412244fc.ba9efc",
                               "type": "inject",
                               "z": "54b226bc.0793e8",
                               "name": "",
                               "props": [
                                   {
                                       "p": "payload"
                                   },
                                   {
                                       "p": "topic",
                                       "vt": "str"
                                   }
                               ],
                               "repeat": "",
                               "crontab": "",
                               "once": false,
                               "onceDelay": 0.1,
                               "topic": "hm-rega.0.1428",
                               "payload": "true",
                               "payloadType": "bool",
                               "x": 370,
                               "y": 3980,
                               "wires": [
                                   [
                                       "a3ec5934.8d08b8"
                                   ]
                               ]
                           },
                           {
                               "id": "96ce7f26.e5f56",
                               "type": "inject",
                               "z": "54b226bc.0793e8",
                               "name": "",
                               "props": [
                                   {
                                       "p": "payload"
                                   },
                                   {
                                       "p": "topic",
                                       "vt": "str"
                                   }
                               ],
                               "repeat": "",
                               "crontab": "",
                               "once": false,
                               "onceDelay": 0.1,
                               "topic": "enigma2.0.enigma2.STANDBY",
                               "payload": "false",
                               "payloadType": "bool",
                               "x": 320,
                               "y": 3940,
                               "wires": [
                                   [
                                       "a3ec5934.8d08b8"
                                   ]
                               ]
                           },
                           {
                               "id": "64c2e575.780d6c",
                               "type": "inject",
                               "z": "54b226bc.0793e8",
                               "name": "",
                               "props": [
                                   {
                                       "p": "payload"
                                   },
                                   {
                                       "p": "topic",
                                       "vt": "str"
                                   }
                               ],
                               "repeat": "",
                               "crontab": "",
                               "once": false,
                               "onceDelay": 0.1,
                               "topic": "vorhang",
                               "payload": "100",
                               "payloadType": "num",
                               "x": 390,
                               "y": 4060,
                               "wires": [
                                   [
                                       "a3ec5934.8d08b8"
                                   ]
                               ]
                           },
                           {
                               "id": "240fb2b3.9b5fae",
                               "type": "comment",
                               "z": "54b226bc.0793e8",
                               "name": "mit function Node Kontext",
                               "info": "",
                               "x": 230,
                               "y": 3800,
                               "wires": []
                           },
                           {
                               "id": "c7db9152.d09f1",
                               "type": "ioBroker out",
                               "z": "54b226bc.0793e8",
                               "name": "schalte Zigbee Device (Vorhang)",
                               "topic": "",
                               "ack": "false",
                               "autoCreate": "false",
                               "stateName": "",
                               "role": "",
                               "payloadType": "",
                               "readonly": "",
                               "stateUnit": "",
                               "stateMin": "",
                               "stateMax": "",
                               "x": 850,
                               "y": 3940,
                               "wires": []
                           },
                           {
                               "id": "a3ec5934.8d08b8",
                               "type": "function",
                               "z": "54b226bc.0793e8",
                               "name": "",
                               "func": "if (msg.topic === 'hm-rega.0.1428'){\n    context.set('nacht',msg.payload);\n    return null;\n}\nif (msg.topic === 'vorhang'){\n    context.set('vorhang',msg.payload);\n    return null;\n}\n\n//hole aktuellen vorhang und aktuellen tagesstatus\nvar nacht = context.get('nacht');\nvar vorhang = context.get ('vorhang');\n\nif (nacht === undefined || vorhang === undefined) return null;\n\nif (msg.payload){   // StandbyModus\n   if (vorhang < 100) msg.payload = 100; else return null; // wenn nicht Standby und Vorhang nicht auf dann machte Vorhang auf\n} else {    //nicht im Standby\n    if (nacht) msg.payload = 0; else return null; // wenn Nacht mache Vorhang zu, sonst nichts    \n}\n\nreturn msg;",
                               "outputs": 1,
                               "noerr": 0,
                               "initialize": "",
                               "finalize": "",
                               "libs": [],
                               "x": 590,
                               "y": 3940,
                               "wires": [
                                   [
                                       "b306a646.47dd98",
                                       "c7db9152.d09f1"
                                   ]
                               ]
                           },
                           {
                               "id": "b306a646.47dd98",
                               "type": "debug",
                               "z": "54b226bc.0793e8",
                               "name": "",
                               "active": true,
                               "tosidebar": true,
                               "console": false,
                               "tostatus": false,
                               "complete": "false",
                               "statusVal": "",
                               "statusType": "auto",
                               "x": 790,
                               "y": 3900,
                               "wires": []
                           },
                           {
                               "id": "40f4db6e.5048f4",
                               "type": "inject",
                               "z": "54b226bc.0793e8",
                               "name": "",
                               "props": [
                                   {
                                       "p": "payload"
                                   },
                                   {
                                       "p": "topic",
                                       "vt": "str"
                                   }
                               ],
                               "repeat": "",
                               "crontab": "",
                               "once": false,
                               "onceDelay": 0.1,
                               "topic": "vorhang",
                               "payload": "0",
                               "payloadType": "num",
                               "x": 400,
                               "y": 4100,
                               "wires": [
                                   [
                                       "a3ec5934.8d08b8"
                                   ]
                               ]
                           },
                           {
                               "id": "392a8fa8.62bc7",
                               "type": "inject",
                               "z": "54b226bc.0793e8",
                               "name": "",
                               "props": [
                                   {
                                       "p": "payload"
                                   },
                                   {
                                       "p": "topic",
                                       "vt": "str"
                                   }
                               ],
                               "repeat": "",
                               "crontab": "",
                               "once": false,
                               "onceDelay": 0.1,
                               "topic": "hm-rega.0.1428",
                               "payload": "false",
                               "payloadType": "bool",
                               "x": 360,
                               "y": 4020,
                               "wires": [
                                   [
                                       "a3ec5934.8d08b8"
                                   ]
                               ]
                           }
                        ]
                        

                        Der code der function Node beinhaltet also den vollständigen Flow der Logik - wie gesagt kann man dann auch im JS machen:

                        if (msg.topic === 'hm-rega.0.1428'){
                            context.set('nacht',msg.payload);
                            return null;
                        }
                        if (msg.topic === 'vorhang'){
                            context.set('vorhang',msg.payload);
                            return null;
                        }
                        
                        //hole aktuellen vorhang und aktuellen tagesstatus
                        var nacht = context.get('nacht');
                        var vorhang = context.get ('vorhang');
                        
                        if (nacht === undefined || vorhang === undefined) return null;
                        
                        if (msg.payload){   // StandbyModus
                           if (vorhang < 100) msg.payload = 100; else return null; // wenn nicht Standby und Vorhang nicht auf dann machte Vorhang auf
                        } else {    //nicht im Standby
                            if (nacht) msg.payload = 0; else return null; // wenn Nacht mache Vorhang zu, sonst nichts    
                        }
                        
                        return msg;
                        

                        Wie gesagt sehr übersichtlich - nur dafür brauche ich dann NodeRed nicht mehr, wenn ich die Logik in Function Nodes verstecken möchte. Dann sollte man sich ggf. vielleicht noch mir subflows beschäftigen. Function Nodes haben zwar ihre Berechtigung - aber wirklich nur dann, wenn man mit den vorhandenen Nodes nicht mehr klar kommt.

                        Bei welcher Posi nun 0 oder 100 ist - weiß ich nicht, aber ich hab mal 100 für offen angenommen und im Standby Modus wird alles was kleiner 100 ist aufgemacht (also auch wenn der Vorhang nur halb offen ist. ;) )

                        Und nochmals - Nachrichten warten nicht!! - Wenn man verschiedene Nachrichten/States vergleichen oder auswerten will, muss man die zwischenspeichern. Wenn Deine Homematic Node Nacht ausgibt und anschließend eine andere Node - Standby - dann weiß niemand mehr was die Homematic Node ausgegeben hat, wenn man deren Zustand in dem Flow nicht speichert.

                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                        D 1 Antwort Letzte Antwort
                        0
                        • mickymM mickym

                          So nun die übersichtlichste bzw. unübersichtlichste Methode (da man von der Logik nichts mehr sieht) - aber dafür braucht man kein NodeRed. Ich hab nur mal mit den vielen Inject NOdes die Datenpunkte-States simuliert:

                          260ca6f3-aa1c-4de3-9ebe-9d8276b098ec-image.png

                          Man sieht sehr übersichtlich. :blush: Alles geht in eine Function NOde und es kómmt was raus oder auch nicht. Das Kontextmenü zeigt aber gleich die Variablen des Kontextes der Function Node, die man wieder brauchst um die Nachrichten, die ja nicht zeitgleich auftreffen miteinander zu vergleichen.

                          Also im Prinzip ersetzt der Kontext der function Node die Flow -Variablen.

                          Raus kommt dann ein payload mit 0 oder 100 - um Vorhang auf oder zu zumachen:

                          1d60501b-dbde-4fa2-ab69-73e9f64f434a-image.png

                          Als payload kommt dann halt 0 oder 100 raus, um den Vorhang zu schließen oder zu öffnen.

                          [
                             {
                                 "id": "44d258c5.d12668",
                                 "type": "inject",
                                 "z": "54b226bc.0793e8",
                                 "name": "",
                                 "props": [
                                     {
                                         "p": "payload"
                                     },
                                     {
                                         "p": "topic",
                                         "vt": "str"
                                     }
                                 ],
                                 "repeat": "",
                                 "crontab": "",
                                 "once": false,
                                 "onceDelay": 0.1,
                                 "topic": "enigma2.0.enigma2.STANDBY",
                                 "payload": "true",
                                 "payloadType": "bool",
                                 "x": 320,
                                 "y": 3900,
                                 "wires": [
                                     [
                                         "a3ec5934.8d08b8"
                                     ]
                                 ]
                             },
                             {
                                 "id": "412244fc.ba9efc",
                                 "type": "inject",
                                 "z": "54b226bc.0793e8",
                                 "name": "",
                                 "props": [
                                     {
                                         "p": "payload"
                                     },
                                     {
                                         "p": "topic",
                                         "vt": "str"
                                     }
                                 ],
                                 "repeat": "",
                                 "crontab": "",
                                 "once": false,
                                 "onceDelay": 0.1,
                                 "topic": "hm-rega.0.1428",
                                 "payload": "true",
                                 "payloadType": "bool",
                                 "x": 370,
                                 "y": 3980,
                                 "wires": [
                                     [
                                         "a3ec5934.8d08b8"
                                     ]
                                 ]
                             },
                             {
                                 "id": "96ce7f26.e5f56",
                                 "type": "inject",
                                 "z": "54b226bc.0793e8",
                                 "name": "",
                                 "props": [
                                     {
                                         "p": "payload"
                                     },
                                     {
                                         "p": "topic",
                                         "vt": "str"
                                     }
                                 ],
                                 "repeat": "",
                                 "crontab": "",
                                 "once": false,
                                 "onceDelay": 0.1,
                                 "topic": "enigma2.0.enigma2.STANDBY",
                                 "payload": "false",
                                 "payloadType": "bool",
                                 "x": 320,
                                 "y": 3940,
                                 "wires": [
                                     [
                                         "a3ec5934.8d08b8"
                                     ]
                                 ]
                             },
                             {
                                 "id": "64c2e575.780d6c",
                                 "type": "inject",
                                 "z": "54b226bc.0793e8",
                                 "name": "",
                                 "props": [
                                     {
                                         "p": "payload"
                                     },
                                     {
                                         "p": "topic",
                                         "vt": "str"
                                     }
                                 ],
                                 "repeat": "",
                                 "crontab": "",
                                 "once": false,
                                 "onceDelay": 0.1,
                                 "topic": "vorhang",
                                 "payload": "100",
                                 "payloadType": "num",
                                 "x": 390,
                                 "y": 4060,
                                 "wires": [
                                     [
                                         "a3ec5934.8d08b8"
                                     ]
                                 ]
                             },
                             {
                                 "id": "240fb2b3.9b5fae",
                                 "type": "comment",
                                 "z": "54b226bc.0793e8",
                                 "name": "mit function Node Kontext",
                                 "info": "",
                                 "x": 230,
                                 "y": 3800,
                                 "wires": []
                             },
                             {
                                 "id": "c7db9152.d09f1",
                                 "type": "ioBroker out",
                                 "z": "54b226bc.0793e8",
                                 "name": "schalte Zigbee Device (Vorhang)",
                                 "topic": "",
                                 "ack": "false",
                                 "autoCreate": "false",
                                 "stateName": "",
                                 "role": "",
                                 "payloadType": "",
                                 "readonly": "",
                                 "stateUnit": "",
                                 "stateMin": "",
                                 "stateMax": "",
                                 "x": 850,
                                 "y": 3940,
                                 "wires": []
                             },
                             {
                                 "id": "a3ec5934.8d08b8",
                                 "type": "function",
                                 "z": "54b226bc.0793e8",
                                 "name": "",
                                 "func": "if (msg.topic === 'hm-rega.0.1428'){\n    context.set('nacht',msg.payload);\n    return null;\n}\nif (msg.topic === 'vorhang'){\n    context.set('vorhang',msg.payload);\n    return null;\n}\n\n//hole aktuellen vorhang und aktuellen tagesstatus\nvar nacht = context.get('nacht');\nvar vorhang = context.get ('vorhang');\n\nif (nacht === undefined || vorhang === undefined) return null;\n\nif (msg.payload){   // StandbyModus\n   if (vorhang < 100) msg.payload = 100; else return null; // wenn nicht Standby und Vorhang nicht auf dann machte Vorhang auf\n} else {    //nicht im Standby\n    if (nacht) msg.payload = 0; else return null; // wenn Nacht mache Vorhang zu, sonst nichts    \n}\n\nreturn msg;",
                                 "outputs": 1,
                                 "noerr": 0,
                                 "initialize": "",
                                 "finalize": "",
                                 "libs": [],
                                 "x": 590,
                                 "y": 3940,
                                 "wires": [
                                     [
                                         "b306a646.47dd98",
                                         "c7db9152.d09f1"
                                     ]
                                 ]
                             },
                             {
                                 "id": "b306a646.47dd98",
                                 "type": "debug",
                                 "z": "54b226bc.0793e8",
                                 "name": "",
                                 "active": true,
                                 "tosidebar": true,
                                 "console": false,
                                 "tostatus": false,
                                 "complete": "false",
                                 "statusVal": "",
                                 "statusType": "auto",
                                 "x": 790,
                                 "y": 3900,
                                 "wires": []
                             },
                             {
                                 "id": "40f4db6e.5048f4",
                                 "type": "inject",
                                 "z": "54b226bc.0793e8",
                                 "name": "",
                                 "props": [
                                     {
                                         "p": "payload"
                                     },
                                     {
                                         "p": "topic",
                                         "vt": "str"
                                     }
                                 ],
                                 "repeat": "",
                                 "crontab": "",
                                 "once": false,
                                 "onceDelay": 0.1,
                                 "topic": "vorhang",
                                 "payload": "0",
                                 "payloadType": "num",
                                 "x": 400,
                                 "y": 4100,
                                 "wires": [
                                     [
                                         "a3ec5934.8d08b8"
                                     ]
                                 ]
                             },
                             {
                                 "id": "392a8fa8.62bc7",
                                 "type": "inject",
                                 "z": "54b226bc.0793e8",
                                 "name": "",
                                 "props": [
                                     {
                                         "p": "payload"
                                     },
                                     {
                                         "p": "topic",
                                         "vt": "str"
                                     }
                                 ],
                                 "repeat": "",
                                 "crontab": "",
                                 "once": false,
                                 "onceDelay": 0.1,
                                 "topic": "hm-rega.0.1428",
                                 "payload": "false",
                                 "payloadType": "bool",
                                 "x": 360,
                                 "y": 4020,
                                 "wires": [
                                     [
                                         "a3ec5934.8d08b8"
                                     ]
                                 ]
                             }
                          ]
                          

                          Der code der function Node beinhaltet also den vollständigen Flow der Logik - wie gesagt kann man dann auch im JS machen:

                          if (msg.topic === 'hm-rega.0.1428'){
                              context.set('nacht',msg.payload);
                              return null;
                          }
                          if (msg.topic === 'vorhang'){
                              context.set('vorhang',msg.payload);
                              return null;
                          }
                          
                          //hole aktuellen vorhang und aktuellen tagesstatus
                          var nacht = context.get('nacht');
                          var vorhang = context.get ('vorhang');
                          
                          if (nacht === undefined || vorhang === undefined) return null;
                          
                          if (msg.payload){   // StandbyModus
                             if (vorhang < 100) msg.payload = 100; else return null; // wenn nicht Standby und Vorhang nicht auf dann machte Vorhang auf
                          } else {    //nicht im Standby
                              if (nacht) msg.payload = 0; else return null; // wenn Nacht mache Vorhang zu, sonst nichts    
                          }
                          
                          return msg;
                          

                          Wie gesagt sehr übersichtlich - nur dafür brauche ich dann NodeRed nicht mehr, wenn ich die Logik in Function Nodes verstecken möchte. Dann sollte man sich ggf. vielleicht noch mir subflows beschäftigen. Function Nodes haben zwar ihre Berechtigung - aber wirklich nur dann, wenn man mit den vorhandenen Nodes nicht mehr klar kommt.

                          Bei welcher Posi nun 0 oder 100 ist - weiß ich nicht, aber ich hab mal 100 für offen angenommen und im Standby Modus wird alles was kleiner 100 ist aufgemacht (also auch wenn der Vorhang nur halb offen ist. ;) )

                          Und nochmals - Nachrichten warten nicht!! - Wenn man verschiedene Nachrichten/States vergleichen oder auswerten will, muss man die zwischenspeichern. Wenn Deine Homematic Node Nacht ausgibt und anschließend eine andere Node - Standby - dann weiß niemand mehr was die Homematic Node ausgegeben hat, wenn man deren Zustand in dem Flow nicht speichert.

                          D Offline
                          D Offline
                          Dexxter
                          schrieb am zuletzt editiert von
                          #12

                          @mickym
                          Das ist ja mal mehr als ausführlich.......super, DANKE!
                          Dann kann ich mich mal damit beschäftigen.
                          Ich werde auch Deinen Rat beherzigen alles was möglich ist mit den vorhandenen Nodes zu lösen.
                          Auf jeden Fall habe ich jetzt was womit ich mein Verständnis zu den Funktionen etwas vertiefen kann.
                          Nachmals Danke.
                          Dexxter

                          mickymM 1 Antwort Letzte Antwort
                          0
                          • D Dexxter

                            @mickym
                            Das ist ja mal mehr als ausführlich.......super, DANKE!
                            Dann kann ich mich mal damit beschäftigen.
                            Ich werde auch Deinen Rat beherzigen alles was möglich ist mit den vorhandenen Nodes zu lösen.
                            Auf jeden Fall habe ich jetzt was womit ich mein Verständnis zu den Funktionen etwas vertiefen kann.
                            Nachmals Danke.
                            Dexxter

                            mickymM Offline
                            mickymM Offline
                            mickym
                            Most Active
                            schrieb am zuletzt editiert von mickym
                            #13

                            @dexxter Wie gesagt - in Function Nodes - kannst Du ganz normales Javascript schreiben. Also Input bekommst Du ein Nachrichtenobjekt (msg) und ausgeben kannst Du an einem oder mehreren Ausgängen wieder ein Nachrichtenobjekt oder nichts.

                            In der Hilfe zur Function Node - hast ja auch eine genauere Beschreibung mit Beispielen, um mehrere Nachrichten gleichzeitig oder hintereinander aus der function Node auszugeben.

                            Generell zum Testen und Spielen mit Javascript schlage ich hier in den Tutorial nach: https://www.w3schools.com/js/default.asp

                            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                            1 Antwort Letzte Antwort
                            1
                            Antworten
                            • In einem neuen Thema antworten
                            Anmelden zum Antworten
                            • Älteste zuerst
                            • Neuste zuerst
                            • Meiste Stimmen


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            662

                            Online

                            32.4k

                            Benutzer

                            81.5k

                            Themen

                            1.3m

                            Beiträge
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                            ioBroker Community 2014-2025
                            logo
                            • Anmelden

                            • Du hast noch kein Konto? Registrieren

                            • Anmelden oder registrieren, um zu suchen
                            • Erster Beitrag
                              Letzter Beitrag
                            0
                            • Home
                            • Aktuell
                            • Tags
                            • Ungelesen 0
                            • Kategorien
                            • Unreplied
                            • Beliebt
                            • GitHub
                            • Docu
                            • Hilfe