Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Flow Optimieren

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Flow Optimieren

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

      Hallo an Alle 😉

      ich bin fasziniert vom Node-Red und begeistert über dieses Drag and Drop verfahren durch diese Grafische Darstellung..

      Dennoch komme ich von FHEM und da gab es sowas halt nicht ^^ und jetzt versuche ich meine Flows auch wirklich zu Optimieren um am Ende irgendwann noch durchzusteigen..

      Zur Info, ich nutze Alexa, Siri, MAX und die UI und möchte am Ende bei jedem Gerät dann auch die tatsächliche Ausgabe haben.. Dies funktioniert auch super. Aber der FLOW ist Katastrophal 😄

      eventuell kann mir jemand nen Tipp geben wie ich es besser lösen kann.. ich habe halt viel Response um die Geräte in sich aktuell zu halten.

      Hier mein Flow:

      https://www.directupload.net/file/d/5298/w7mt5ril_jpg.htm ~~````
      [
      {
      "id": "a57621dc.1d6ef",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "Wohnzimmer setpoint manual",
      "func": "msg.payload = {rf_address:"02a00a", degrees: msg.payload, mode:"1"};\nreturn msg;",
      "outputs": 1,
      "noerr": 0,
      "x": 1580,
      "y": 140,
      "wires": [
      [
      "fd1276d1.feec28"
      ]
      ]
      },
      {
      "id": "fd1276d1.feec28",
      "type": "maxcube in",
      "z": "6c487d5b.5761f4",
      "server": "cac16036.406e",
      "x": 1820,
      "y": 190,
      "wires": []
      },
      {
      "id": "6a53e5a4.2db39c",
      "type": "alexa-home",
      "z": "6c487d5b.5761f4",
      "conf": "",
      "device": "39363",
      "acknoledge": true,
      "name": "",
      "topic": "",
      "x": 190,
      "y": 140,
      "wires": [
      [
      "1f3839ec.305816"
      ]
      ]
      },
      {
      "id": "197a705f.3d4cd",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "Badezimmer setpoint manual",
      "func": "msg.payload = {rf_address:"10c706", degrees: msg.payload, mode:"1"};\nreturn msg;",
      "outputs": 1,
      "noerr": 0,
      "x": 1590,
      "y": 240,
      "wires": [
      [
      "fd1276d1.feec28"
      ]
      ]
      },
      {
      "id": "ddc18845.3636f8",
      "type": "alexa-home",
      "z": "6c487d5b.5761f4",
      "conf": "",
      "device": "39377",
      "acknoledge": true,
      "name": "",
      "topic": "",
      "x": 190,
      "y": 240,
      "wires": [
      [
      "e6e2b4cc.b97918"
      ]
      ]
      },
      {
      "id": "d1907b68.f1f228",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "Küche setpoint manual",
      "func": "msg.payload = {rf_address:"03c40a", degrees: msg.payload, mode:"1"};\nreturn msg;",
      "outputs": 1,
      "noerr": 0,
      "x": 1610,
      "y": 190,
      "wires": [
      [
      "fd1276d1.feec28"
      ]
      ]
      },
      {
      "id": "155e0b35.63cf85",
      "type": "alexa-home",
      "z": "6c487d5b.5761f4",
      "conf": "",
      "device": "39378",
      "acknoledge": true,
      "name": "",
      "topic": "",
      "x": 190,
      "y": 190,
      "wires": [
      [
      "2d4f7ed9.0e6192"
      ]
      ]
      },
      {
      "id": "73af01ae.567e",
      "type": "alexa-home",
      "z": "6c487d5b.5761f4",
      "conf": "",
      "device": "39852",
      "acknoledge": true,
      "name": "",
      "topic": "",
      "x": 150,
      "y": 300,
      "wires": [
      [
      "c1c72dae.ca35d"
      ]
      ]
      },
      {
      "id": "c1c72dae.ca35d",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "An/Aus",
      "func": "var msg1 = { payload:"20" };\nvar msg2 = { payload:"4.5" };\n\nif (msg.payload === true) {\n return msg1;\n} else {\n return msg2;\n}",
      "outputs": 1,
      "noerr": 0,
      "x": 690,
      "y": 300,
      "wires": [
      [
      "2d4f7ed9.0e6192",
      "e6e2b4cc.b97918",
      "1f3839ec.305816"
      ]
      ]
      },
      {
      "id": "786301ee.13bb4",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "return",
      "func": "return {payload: {CurrentTemperature: msg.payload}};",
      "outputs": 1,
      "noerr": 0,
      "x": 680,
      "y": 390,
      "wires": [
      [
      "58a6d437.56316c"
      ]
      ]
      },
      {
      "id": "90e00688.20ea08",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "func",
      "func": "\nvar Heizen = { payload: msg.payload.TargetTemperature };\n\n\n\n return Heizen;\n",
      "outputs": 1,
      "noerr": 0,
      "x": 1220,
      "y": 390,
      "wires": [
      [
      "1f3839ec.305816"
      ]
      ]
      },
      {
      "id": "20eaff46.684e1",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "func",
      "func": "\nvar Heizen = { payload: msg.payload.TargetTemperature };\n\n\n\n return Heizen;\n",
      "outputs": 1,
      "noerr": 0,
      "x": 1230,
      "y": 480,
      "wires": [
      [
      "2d4f7ed9.0e6192"
      ]
      ]
      },
      {
      "id": "719780d.7ab928",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "func",
      "func": "\nvar Heizen = { payload: msg.payload.TargetTemperature };\n\n\n\n return Heizen;\n",
      "outputs": 1,
      "noerr": 0,
      "x": 1230,
      "y": 560,
      "wires": [
      [
      "e6e2b4cc.b97918"
      ]
      ]
      },
      {
      "id": "2f061e32.4a7b22",
      "type": "inject",
      "z": "6c487d5b.5761f4",
      "name": "GetTemps",
      "topic": "",
      "payload": "true",
      "payloadType": "bool",
      "repeat": "300",
      "crontab": "",
      "once": true,
      "onceDelay": "",
      "x": 190,
      "y": 480,
      "wires": [
      [
      "c2d064b5.403ae8",
      "37647186.89acbe",
      "dd86eb63.25cea8"
      ]
      ]
      },
      {
      "id": "c2d064b5.403ae8",
      "type": "ioBroker get",
      "z": "6c487d5b.5761f4",
      "name": "Wandthermostat 1 temperature",
      "topic": "maxcube.0.devices.thermostat_02a00a.temp",
      "attrname": "payload",
      "payloadType": "value",
      "x": 470,
      "y": 390,
      "wires": [
      [
      "786301ee.13bb4",
      "e57c07ce.887758"
      ]
      ]
      },
      {
      "id": "f7c930c0.ad8a7",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "return",
      "func": "return {payload: {CurrentTemperature: msg.payload}};",
      "outputs": 1,
      "noerr": 0,
      "x": 680,
      "y": 480,
      "wires": [
      [
      "1d29cef2.8e2f41"
      ]
      ]
      },
      {
      "id": "d0823b2a.fa8228",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "return",
      "func": "return {payload: {CurrentTemperature: msg.payload}};",
      "outputs": 1,
      "noerr": 0,
      "x": 680,
      "y": 560,
      "wires": [
      [
      "d8224eac.6dd3c"
      ]
      ]
      },
      {
      "id": "37647186.89acbe",
      "type": "ioBroker get",
      "z": "6c487d5b.5761f4",
      "name": "Küch temperature",
      "topic": "maxcube.0.devices.thermostat_03c40a.temp",
      "attrname": "payload",
      "payloadType": "value",
      "x": 430,
      "y": 480,
      "wires": [
      [
      "f7c930c0.ad8a7",
      "74ce215f.5828d"
      ]
      ]
      },
      {
      "id": "dd86eb63.25cea8",
      "type": "ioBroker get",
      "z": "6c487d5b.5761f4",
      "name": "Wandthermostat 1 temperature",
      "topic": "maxcube.0.devices.thermostat_10c706.temp",
      "attrname": "payload",
      "payloadType": "value",
      "x": 470,
      "y": 560,
      "wires": [
      [
      "d0823b2a.fa8228",
      "f5fb9161.625dc"
      ]
      ]
      },
      {
      "id": "e57c07ce.887758",
      "type": "ui_gauge",
      "z": "6c487d5b.5761f4",
      "name": "",
      "group": "56ff2f28.47cab",
      "order": 1,
      "width": 0,
      "height": 0,
      "gtype": "donut",
      "title": "Heizung",
      "label": "Celsius",
      "format": "{{value}}",
      "min": "5",
      "max": "26",
      "colors": [
      "#0060ff",
      "#24e400",
      "#ca3838"
      ],
      "seg1": "20",
      "seg2": "20",
      "x": 690,
      "y": 350,
      "wires": []
      },
      {
      "id": "58a6d437.56316c",
      "type": "homekit-service",
      "z": "6c487d5b.5761f4",
      "bridge": "1cb3a27f.51967e",
      "name": "Wohnzimmer Heizung",
      "serviceName": "Thermostat",
      "manufacturer": "Default Manufacturer",
      "model": "Default Model",
      "serialNo": "Default Serial Number",
      "characteristicProperties": "{\n "TargetTemperature": {\n "minValue": 4.5,\n "maxValue": 26,\n "minStep": 0.5\n}\n \n}",
      "x": 930,
      "y": 390,
      "wires": [
      [
      "90e00688.20ea08"
      ]
      ]
      },
      {
      "id": "1d29cef2.8e2f41",
      "type": "homekit-service",
      "z": "6c487d5b.5761f4",
      "bridge": "1cb3a27f.51967e",
      "name": "Küche Heizung",
      "serviceName": "Thermostat",
      "manufacturer": "Default Manufacturer",
      "model": "Default Model",
      "serialNo": "Default Serial Number",
      "characteristicProperties": "{\n "TargetTemperature": {\n "minValue": 4.5,\n "maxValue": 26,\n "minStep": 0.5\n}\n \n}",
      "x": 950,
      "y": 480,
      "wires": [
      [
      "20eaff46.684e1"
      ]
      ]
      },
      {
      "id": "d8224eac.6dd3c",
      "type": "homekit-service",
      "z": "6c487d5b.5761f4",
      "bridge": "1cb3a27f.51967e",
      "name": "Badezimmer Heizung",
      "serviceName": "Thermostat",
      "manufacturer": "Default Manufacturer",
      "model": "Default Model",
      "serialNo": "Default Serial Number",
      "characteristicProperties": "{\n "TargetTemperature": {\n "minValue": 4.5,\n "maxValue": 26,\n "minStep": 0.5\n}\n \n}",
      "x": 930,
      "y": 560,
      "wires": [
      [
      "719780d.7ab928"
      ]
      ]
      },
      {
      "id": "74ce215f.5828d",
      "type": "ui_gauge",
      "z": "6c487d5b.5761f4",
      "name": "",
      "group": "bfabf323.eac56",
      "order": 1,
      "width": 0,
      "height": 0,
      "gtype": "donut",
      "title": "Heizung",
      "label": "Celsius",
      "format": "{{value}}",
      "min": "5",
      "max": "26",
      "colors": [
      "#0060ff",
      "#24e400",
      "#ca3838"
      ],
      "seg1": "20",
      "seg2": "20",
      "x": 690,
      "y": 440,
      "wires": []
      },
      {
      "id": "f5fb9161.625dc",
      "type": "ui_gauge",
      "z": "6c487d5b.5761f4",
      "name": "",
      "group": "a61eadd2.b64c5",
      "order": 1,
      "width": 0,
      "height": 0,
      "gtype": "donut",
      "title": "Heizung",
      "label": "Celsius",
      "format": "{{value}}",
      "min": "5",
      "max": "26",
      "colors": [
      "#0060ff",
      "#24e400",
      "#ca3838"
      ],
      "seg1": "20",
      "seg2": "20",
      "x": 690,
      "y": 520,
      "wires": []
      },
      {
      "id": "2d4f7ed9.0e6192",
      "type": "ui_numeric",
      "z": "6c487d5b.5761f4",
      "name": "",
      "label": "Temperatur",
      "group": "bfabf323.eac56",
      "order": 2,
      "width": 0,
      "height": 0,
      "passthru": true,
      "topic": "",
      "format": "{{value}}",
      "min": "4.5",
      "max": "26",
      "step": "0.5",
      "x": 1000,
      "y": 190,
      "wires": [
      [
      "d1907b68.f1f228",
      "65b661c1.e26ae"
      ]
      ]
      },
      {
      "id": "e6e2b4cc.b97918",
      "type": "ui_numeric",
      "z": "6c487d5b.5761f4",
      "name": "",
      "label": "Temperatur",
      "group": "a61eadd2.b64c5",
      "order": 2,
      "width": 0,
      "height": 0,
      "passthru": true,
      "topic": "",
      "format": "{{value}}",
      "min": "4.5",
      "max": "26",
      "step": "0.5",
      "x": 1000,
      "y": 240,
      "wires": [
      [
      "197a705f.3d4cd",
      "b25bbf0f.8ca07"
      ]
      ]
      },
      {
      "id": "1f3839ec.305816",
      "type": "ui_numeric",
      "z": "6c487d5b.5761f4",
      "name": "",
      "label": "Temperatur",
      "group": "56ff2f28.47cab",
      "order": 2,
      "width": 0,
      "height": 0,
      "passthru": true,
      "topic": "",
      "format": "{{value}}",
      "min": "4.5",
      "max": "26",
      "step": "0.5",
      "x": 1000,
      "y": 140,
      "wires": [
      [
      "a57621dc.1d6ef",
      "18b30ed7.655131"
      ]
      ]
      },
      {
      "id": "18b30ed7.655131",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "return",
      "func": "var msg1 = {payload: { TargetTemperature: msg.payload, TargetHeatingCoolingState: "0" }};\nvar msg2 = {payload: { TargetTemperature: msg.payload, TargetHeatingCoolingState: "1" }};\n\nif (msg.payload == "4.5") {\n return msg1;\n} else {\n return msg2;\n}\n",
      "outputs": 1,
      "noerr": 0,
      "x": 980,
      "y": 350,
      "wires": [
      [
      "58a6d437.56316c"
      ]
      ]
      },
      {
      "id": "65b661c1.e26ae",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "return",
      "func": "var msg1 = {payload: { TargetTemperature: msg.payload, TargetHeatingCoolingState: "0" }};\nvar msg2 = {payload: { TargetTemperature: msg.payload, TargetHeatingCoolingState: "1" }};\n\nif (msg.payload == "4.5") {\n return msg1;\n} else {\n return msg2;\n}\n",
      "outputs": 1,
      "noerr": 0,
      "x": 980,
      "y": 440,
      "wires": [
      [
      "1d29cef2.8e2f41"
      ]
      ]
      },
      {
      "id": "b25bbf0f.8ca07",
      "type": "function",
      "z": "6c487d5b.5761f4",
      "name": "return",
      "func": "var msg1 = {payload: { TargetTemperature: msg.payload, TargetHeatingCoolingState: "0" }};\nvar msg2 = {payload: { TargetTemperature: msg.payload, TargetHeatingCoolingState: "1" }};\n\nif (msg.payload == "4.5") {\n return msg1;\n} else {\n return msg2;\n}\n",
      "outputs": 1,
      "noerr": 0,
      "x": 980,
      "y": 520,
      "wires": [
      [
      "d8224eac.6dd3c"
      ]
      ]
      },
      {
      "id": "cac16036.406e",
      "type": "maxcube-server",
      "z": "",
      "host": "1.2.3.110",
      "port": "62910"
      },
      {
      "id": "56ff2f28.47cab",
      "type": "ui_group",
      "z": "",
      "name": "Wohnzimmer",
      "tab": "4b4e4d6a.678844",
      "order": 2,
      "disp": true,
      "width": "6",
      "collapse": true
      },
      {
      "id": "1cb3a27f.51967e",
      "type": "homekit-bridge",
      "z": "",
      "bridgeName": "Plastikjunkies",
      "pinCode": "111-11-111",
      "port": "",
      "manufacturer": "Default Manufacturer",
      "model": "Default Model",
      "serialNo": "Default Serial Number"
      },
      {
      "id": "bfabf323.eac56",
      "type": "ui_group",
      "z": "",
      "name": "Küche",
      "tab": "4b4e4d6a.678844",
      "order": 4,
      "disp": true,
      "width": "6",
      "collapse": true
      },
      {
      "id": "a61eadd2.b64c5",
      "type": "ui_group",
      "z": "",
      "name": "Badezimmer",
      "tab": "4b4e4d6a.678844",
      "order": 3,
      "disp": true,
      "width": "6",
      "collapse": false
      },
      {
      "id": "4b4e4d6a.678844",
      "type": "ui_tab",
      "z": "",
      "name": "Wohnung",
      "icon": "dashboard",
      "order": 2
      }
      ]

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

        Was willst du da besser machen 😄 Sieht doch gut aus!

        Höchstens, noch ein paar allgemeine Anmerkungen:

        Übersichtlichkeit

        Kann man ja nicht grad von Unübersichtlichkeit bei deinem Flow sprechen 😄 Aber falls es komplexer wird:

        • nutze subflows, wo sich Funktionalitäten sinnvoll zusammenfassen lassen

        https://nodered.org/docs/user-guide/edi … e/subflows

        • nutze Link-nodes um die optische Übersichtlichkeit zu erhöhen

        • nutze comment-nodes um den flow zu kommentieren

        • nutze eindeutige Namen für deine nodes, aus denen möglichst die Funktion hervorgeht

        • bei functions-nodes kann ein entsprechender node.status sehr hilfreich sein

        Funktionalität

        • Wo immer möglich, verwende core-node statt function-node

        Meist kann man function-nodes durch switch/change nodes ersetzen.

        • wo das nicht möglich/sinnvoll ist, gehe sparsam mit function-nodes um. Lieber einen function-node mit viel Funktionalität als mehrere mit wenig Funktionalität

        • befasse dich mit JSONata, wenn du mit komplexen JSON-Abfragen/Aufbereitungen zu tun hast (Multi-Line Chart Input, Datenbank In-/Output etc)

        JSONata ist äußerst mächtig. Da kann eine Seite JS-Code schon mal zum Einzeiler werden.

        Warum sparsam mit function-nodes?:

        • function-nodes laufen pro node in einer sandbox und brauchen deshalb mehr Ressourcen (Speicher und Geschwindigkeit)

        • In function-nodes steht einem (nahezu) die volle Javascript-Power zur Verfügung. Das ist Segen und Fluch! Da kann natürlich auch viel daneben gehen und es widerspricht dem Grundgedanken von node-red (ein node für eine Funktion)

        • i.d.R läuft ein function-nodes synchron als eine Funktion. Das kann den kompletten Flow leicht ausbremsen.

        • Und last but not least: Wenn du intensiv function-nodes einsetzt, wirst du dich bald fragen, warum du den Kram nicht gleich in JS löst. Ich weis wovon ich rede :lol:

        Das wir uns nicht falsch verstehen, ich sag nicht, dass man keine function-nodes verwenden soll! Man soll die Teile lediglich nicht leichtfertig einsetzen.

        ergänzt 12.12.18

        1 Reply Last reply Reply Quote 0
        • D
          dondon4002 last edited by

          Moin Moin,

          mega danke für deine Tipps, alleine das Link in-out bringt mir die Übersichtlichkeit die ich haben will 😉 Damit verschwinden schonmal einige Wires 😉

          Das war nur der untere Teil meines Flows daher sah es wohl noch "übersichtlich aus"

          Hier der Aktuelle Flow:

          https://www.directupload.net/file/d/5298/4qqg8nni_jpg.htm ~~Du meintest ich sollte weniger Functions nutzen oder es anders machen.. wie könnte ich denn solche Functions anders einsetzen ?

          var msg1 = { payload: {On:1} };
          var msg2 = { payload: {On:0} };
          
          if (msg.payload === true) {
             return msg1;
          } else {
             return msg2;
          }
          
          
          return {payload: msg.payload.On};
          
          
          msg.payload = {rf_address:"03c3c6", degrees: msg.payload, mode:"0"};
          return msg;
          ````~~
          1 Reply Last reply Reply Quote 0
          • R
            rewenode last edited by

            Zum Beispiel so:

            ! ````
            [
            {
            "id": "2d8e04fd.0126dc",
            "type": "inject",
            "z": "506e6085.abc5d8",
            "name": "true",
            "topic": "",
            "payload": "true",
            "payloadType": "bool",
            "repeat": "",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "x": 353.5,
            "y": 352,
            "wires": [
            [
            "83df29ff.817e48"
            ]
            ]
            },
            {
            "id": "3a00e36.c3e061c",
            "type": "inject",
            "z": "506e6085.abc5d8",
            "name": "false",
            "topic": "",
            "payload": "false",
            "payloadType": "bool",
            "repeat": "",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "x": 352,
            "y": 412,
            "wires": [
            [
            "83df29ff.817e48"
            ]
            ]
            },
            {
            "id": "83df29ff.817e48",
            "type": "change",
            "z": "506e6085.abc5d8",
            "name": "true/false -> {"on": 1/0}",
            "rules": [
            {
            "t": "change",
            "p": "payload",
            "pt": "msg",
            "from": "true",
            "fromt": "bool",
            "to": "{"on": 1}",
            "tot": "json"
            },
            {
            "t": "change",
            "p": "payload",
            "pt": "msg",
            "from": "false",
            "fromt": "bool",
            "to": "{"on":0}",
            "tot": "json"
            }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 598.5,
            "y": 380,
            "wires": [
            [
            "1432e8ed.7c8f3f"
            ]
            ]
            },
            {
            "id": "1432e8ed.7c8f3f",
            "type": "debug",
            "z": "506e6085.abc5d8",
            "name": "",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "false",
            "x": 816.5,
            "y": 380,
            "wires": []
            },
            {
            "id": "7b14cd00.07db84",
            "type": "change",
            "z": "506e6085.abc5d8",
            "name": "payload -> payload.on ",
            "rules": [
            {
            "t": "move",
            "p": "payload",
            "pt": "msg",
            "to": "payload.on",
            "tot": "msg"
            }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 589.5,
            "y": 214,
            "wires": [
            [
            "53736dc1.04afb4"
            ]
            ]
            },
            {
            "id": "53736dc1.04afb4",
            "type": "debug",
            "z": "506e6085.abc5d8",
            "name": "after change-node",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "true",
            "x": 847.5,
            "y": 215,
            "wires": []
            },
            {
            "id": "659e896c.a675d8",
            "type": "inject",
            "z": "506e6085.abc5d8",
            "name": "i am first msg.payload",
            "topic": "",
            "payload": "i am first msg.payload",
            "payloadType": "str",
            "repeat": "",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "x": 331.5,
            "y": 213,
            "wires": [
            [
            "7b14cd00.07db84",
            "83b55682.09b688"
            ]
            ]
            },
            {
            "id": "83b55682.09b688",
            "type": "debug",
            "z": "506e6085.abc5d8",
            "name": "before change-node",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "true",
            "x": 612,
            "y": 278,
            "wires": []
            },
            {
            "id": "cccf27bb.0bee5",
            "type": "inject",
            "z": "506e6085.abc5d8",
            "name": "degrees",
            "topic": "",
            "payload": "42",
            "payloadType": "num",
            "repeat": "",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "x": 353.5,
            "y": 508,
            "wires": [
            [
            "1b42f390.6bf80c"
            ]
            ]
            },
            {
            "id": "cfb30221.5b4678",
            "type": "debug",
            "z": "506e6085.abc5d8",
            "name": "",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "true",
            "x": 971.5,
            "y": 507,
            "wires": []
            },
            {
            "id": "1b42f390.6bf80c",
            "type": "change",
            "z": "506e6085.abc5d8",
            "name": "{rf_address:"03c3c6", degrees: payload, mode:"0"};",
            "rules": [
            {
            "t": "set",
            "p": "temp",
            "pt": "flow",
            "to": "{"rf_address":"03c3c6","degrees":0,"mode":"0"}",
            "tot": "json"
            },
            {
            "t": "set",
            "p": "temp.degrees",
            "pt": "flow",
            "to": "payload",
            "tot": "msg"
            },
            {
            "t": "set",
            "p": "payload",
            "pt": "msg",
            "to": "temp",
            "tot": "flow"
            }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 664.5,
            "y": 508,
            "wires": [
            [
            "cfb30221.5b4678"
            ]
            ]
            }
            ]

            
              ` > CODE: ALLES AUSWÄHLEN
            > 
            > var msg1 = { payload: {On:1} };
            > 
            > var msg2 = { payload: {On:0} };
            > 
            > if (msg.payload === true) {
            > 
            > return msg1;
            > 
            > } else {
            > 
            > return msg2;
            > 
            > } `  
            
             ![3999_bild_1.png](/assets/uploads/files/3999_bild_1.png) 
            
              ` > CODE: ALLES AUSWÄHLEN
            > 
            > return {payload: msg.payload.On}; `  
            
             ![3999_bild_2.png](/assets/uploads/files/3999_bild_2.png) 
            
            Nr.3 ist etwas tricky
            
              ` > CODE: ALLES AUSWÄHLEN
            > 
            > msg.payload = {rf_address:"03c3c6", degrees: msg.payload, mode:"0"};
            > 
            > return msg; `  
            
             ![3999_bild_3.png](/assets/uploads/files/3999_bild_3.png) 
            
            Das sind mal nur so die Grundmöglichkeiten von change-node. Die Teile sind weitaus mächtiger. Stichwort JSONata.
            
            Gruß
            1 Reply Last reply Reply Quote 0
            • R
              rewenode last edited by

              Nachtrag,

              apropos JSONata. Damit geht dann auch Nr. 3 viel einfacher und ohne temp oder sowas:

              ! ````
              [
              {
              "id": "a9e5de60.ef41d8",
              "type": "change",
              "z": "506e6085.abc5d8",
              "name": "{rf_address:"03c3c6", degrees: payload, mode:"0"};",
              "rules": [
              {
              "t": "set",
              "p": "payload",
              "pt": "msg",
              "to": "{\t "rf_address":"03c3c6",\t "degrees":payload,\t "mode":"0"\t}",
              "tot": "jsonata"
              }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 671,
              "y": 599,
              "wires": [
              [
              "cfb30221.5b4678"
              ]
              ]
              }
              ]

              1 Reply Last reply Reply Quote 0
              • D
                dondon4002 last edited by

                Okay, das ist geil!

                Danke dir schonmal 🙂 das macht es einem viel einfacher und man versteht auch etwas mehr die Change Function ,-)

                1 Reply Last reply Reply Quote 0
                • D
                  dondon4002 last edited by

                  So jetzt wird das auch was 😉

                  Erst wollte es nicht so ganz aber den Fehler habe ich dann gefunden..

                  Bei der " return {payload: msg.payload.On}; " hattest du "on" geschrieben und es war genau verkehrt herum.. da ich aus payload.On -> payload machen muss.. aber halb so schlimm so habe ich selbst etwas gelernt 😉

                  https://www.directupload.net/file/d/5298/ysj6nkl5_png.htm

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

                    Na wenn das mal nicht super aussieht!

                    Mit JSONata-Expression im change Node lassen sich die Sachen meist ganz simpel lösen.

                    z.B.

                    var msg1 = { payload: {On:1} };
                    var msg2 = { payload: {On:0} };
                    
                    if (msg.payload === true) {
                    return msg1;
                    } else {
                    return msg2;
                    }
                    
                    

                    entspricht dem JSONata Ausdruck:

                    {
                    "on": (payload = true) ? 1 : 0 
                    }
                    
                    

                    Hier das change-node

                    ! ````
                    [
                    {
                    "id": "7cd65079.2609d",
                    "type": "change",
                    "z": "506e6085.abc5d8",
                    "name": "true/false -> {"on": 1/0}",
                    "rules": [
                    {
                    "t": "set",
                    "p": "payload",
                    "pt": "msg",
                    "to": "{\t"on": (payload = true) ? 1 : 0 \t}",
                    "tot": "jsonata"
                    }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 603,
                    "y": 384,
                    "wires": [
                    [
                    "1432e8ed.7c8f3f"
                    ]
                    ]
                    }
                    ]

                    1 Reply Last reply Reply Quote 0
                    • D
                      dondon4002 last edited by

                      Okay dann jetzt noch die letzte Frage 😉

                      Ich habe einen Hardware Switch, der aber immer nur "On" sendet aber verschiedene Buttonnamen hat..

                      msg.payload : Object
                      object
                      button: 1002
                      name: "On"
                      action: "short released"
                      updated: "2018-12-12T00:05:12+01:00"
                      

                      Ich habe jetzt ein Switch mit 4 Ausgängen mit jeweils diesem Buttons was auch klappt. nun möchte ich aber natürlich wenn man die Taste das 2. mal drückt das er nicht mehr "true" ist sondern "false" wie lese ich denn aus welchen status das gerät in dem moment vor dem schalten hat ? Also die beste Möglichkeit.

                      [
                          {
                              "id": "2fc04fbe.765d",
                              "type": "hue-switch",
                              "z": "bfb6a8ba.7c3258",
                              "name": "Schalter_Licht_Wohnzimmer",
                              "bridge": "d1e08b9e.d58a58",
                              "sensorid": "2",
                              "x": 930,
                              "y": 1040,
                              "wires": [
                                  [
                                      "390d7990.439356"
                                  ]
                              ]
                          },
                          {
                              "id": "390d7990.439356",
                              "type": "switch",
                              "z": "bfb6a8ba.7c3258",
                              "name": "",
                              "property": "payload.button",
                              "propertyType": "msg",
                              "rules": [
                                  {
                                      "t": "eq",
                                      "v": "1002",
                                      "vt": "num"
                                  },
                                  {
                                      "t": "eq",
                                      "v": "2002",
                                      "vt": "str"
                                  },
                                  {
                                      "t": "eq",
                                      "v": "3002",
                                      "vt": "str"
                                  },
                                  {
                                      "t": "eq",
                                      "v": "4002",
                                      "vt": "str"
                                  }
                              ],
                              "checkall": "true",
                              "repair": false,
                              "outputs": 4,
                              "x": 1130,
                              "y": 1040,
                              "wires": [
                                  [
                                      "f661681.73ed298"
                                  ],
                                  [
                                      "cb21d42b.a8c7e8"
                                  ],
                                  [
                                      "119f9629.73467a"
                                  ],
                                  [
                                      "82afcbbd.8130e8"
                                  ]
                              ]
                          },
                          {
                              "id": "82afcbbd.8130e8",
                              "type": "change",
                              "z": "bfb6a8ba.7c3258",
                              "name": "",
                              "rules": [
                                  {
                                      "t": "set",
                                      "p": "payload",
                                      "pt": "msg",
                                      "to": "false",
                                      "tot": "bool"
                                  }
                              ],
                              "action": "",
                              "property": "",
                              "from": "",
                              "to": "",
                              "reg": false,
                              "x": 1340,
                              "y": 1080,
                              "wires": [
                                  []
                              ]
                          },
                          {
                              "id": "cb21d42b.a8c7e8",
                              "type": "change",
                              "z": "bfb6a8ba.7c3258",
                              "name": "",
                              "rules": [
                                  {
                                      "t": "set",
                                      "p": "payload",
                                      "pt": "msg",
                                      "to": "true",
                                      "tot": "bool"
                                  }
                              ],
                              "action": "",
                              "property": "",
                              "from": "",
                              "to": "",
                              "reg": false,
                              "x": 1340,
                              "y": 1020,
                              "wires": [
                                  []
                              ]
                          },
                          {
                              "id": "119f9629.73467a",
                              "type": "change",
                              "z": "bfb6a8ba.7c3258",
                              "name": "",
                              "rules": [
                                  {
                                      "t": "set",
                                      "p": "payload",
                                      "pt": "msg",
                                      "to": "true",
                                      "tot": "bool"
                                  }
                              ],
                              "action": "",
                              "property": "",
                              "from": "",
                              "to": "",
                              "reg": false,
                              "x": 1340,
                              "y": 1050,
                              "wires": [
                                  []
                              ]
                          },
                          {
                              "id": "f661681.73ed298",
                              "type": "change",
                              "z": "bfb6a8ba.7c3258",
                              "name": "",
                              "rules": [
                                  {
                                      "t": "set",
                                      "p": "payload",
                                      "pt": "msg",
                                      "to": "true",
                                      "tot": "bool"
                                  }
                              ],
                              "action": "",
                              "property": "",
                              "from": "",
                              "to": "",
                              "reg": false,
                              "x": 1340,
                              "y": 990,
                              "wires": [
                                  []
                              ]
                          },
                          {
                              "id": "d1e08b9e.d58a58",
                              "type": "hue-bridge",
                              "z": "",
                              "name": "Philips hue",
                              "bridge": "1.2.3.103",
                              "key": "mSUKalbvXcIJRJwvA08GHIMOPUBi7sLANA16XHKK",
                              "interval": "3000"
                          }
                      ]
                      
                      1 Reply Last reply Reply Quote 0
                      • R
                        rewenode last edited by

                        Ich kenne den hue-swich leider nicht;-(

                        Wie genau sieht den das Objekt aus, was vom switch kommt?

                        Häng doch mal einen debug node dran um poste das Object

                        3999_bild.png

                        1 Reply Last reply Reply Quote 0
                        • D
                          dondon4002 last edited by

                          Das sind alle Schalter die an der Fernbedienung sind.

                          Ich möchte halt die Dim up und Dim down gar nicht nutzen sondern die ersten drei schalter sollen Geräte ein und ausschalten und der letzte soll alles direkt ausschalten.. da brauche ich dann nur ein false was ich hinbekommen habe.

                          Problem ist das Kopf 1 z.b. immer nur name: On sendet.. egal ob er 1x oder 2x gedrückt wird.. es gibt nur die Möglichkeit noch knöpfe lange zu drücken für mehr Funktionen. aber das wollte ich so nicht unbedingt regeln.

                          {"payload":{"button":1002,"name":"On","action":"short released","updated":"2018-12-12T00:30:23+01:00"},"info":{"id":"2","uniqueId":"00:17:88:01:03:e5:cb:2a-02-fc00","name":"Schalter_Licht_Wohnzimmer","type":"ZLLSwitch","softwareVersion":"5.45.1.17846","battery":100,"model":{"id":"RWL021","manufacturer":"Philips","name":"Hue Wireless Dimmer Switch","type":"ZLLSwitch"}},"_msgid":"c449ffce.82bbb"}
                          
                          {"payload":{"button":2002,"name":"Dim Up","action":"short released","updated":"2018-12-12T00:30:45+01:00"},"info":{"id":"2","uniqueId":"00:17:88:01:03:e5:cb:2a-02-fc00","name":"Schalter_Licht_Wohnzimmer","type":"ZLLSwitch","softwareVersion":"5.45.1.17846","battery":100,"model":{"id":"RWL021","manufacturer":"Philips","name":"Hue Wireless Dimmer Switch","type":"ZLLSwitch"}},"_msgid":"6691855b.feec5c"}
                          
                          {"payload":{"button":3002,"name":"Dim Down","action":"short released","updated":"2018-12-12T00:31:01+01:00"},"info":{"id":"2","uniqueId":"00:17:88:01:03:e5:cb:2a-02-fc00","name":"Schalter_Licht_Wohnzimmer","type":"ZLLSwitch","softwareVersion":"5.45.1.17846","battery":100,"model":{"id":"RWL021","manufacturer":"Philips","name":"Hue Wireless Dimmer Switch","type":"ZLLSwitch"}},"_msgid":"4f8554eb.f1c7fc"}
                          
                          {"payload":{"button":4002,"name":"Off","action":"short released","updated":"2018-12-12T00:31:13+01:00"},"info":{"id":"2","uniqueId":"00:17:88:01:03:e5:cb:2a-02-fc00","name":"Schalter_Licht_Wohnzimmer","type":"ZLLSwitch","softwareVersion":"5.45.1.17846","battery":100,"model":{"id":"RWL021","manufacturer":"Philips","name":"Hue Wireless Dimmer Switch","type":"ZLLSwitch"}},"_msgid":"c0e37caa.779b"}
                          
                          1 Reply Last reply Reply Quote 0
                          • R
                            rewenode last edited by

                            Das muss man Zwischenspeichern z.B. in eine flow-Variable

                            Hier mal QD

                            ! ````
                            [{"id":"85a8a545.a93f3","type":"switch","z":"506e6085.abc5d8","name":"","property":"payload.button","propertyType":"msg","rules":[{"t":"eq","v":"1002","vt":"num"},{"t":"eq","v":"2002","vt":"str"},{"t":"eq","v":"3002","vt":"str"},{"t":"eq","v":"4002","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":586,"y":371,"wires":[["dace0f09.a2aea8"],[],[],[]]},{"id":"546a53bb.5c21cc","type":"inject","z":"506e6085.abc5d8","name":"button 1002","topic":"","payload":"{"button":1002,"name":"On","action":"short released","updated":"2018-12-12T00:30:23+01:00"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":379.5,"y":371,"wires":[["85a8a545.a93f3"]]},{"id":"8201a4ac.c4cc","type":"debug","z":"506e6085.abc5d8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":945.5,"y":309,"wires":[]},{"id":"dace0f09.a2aea8","type":"change","z":"506e6085.abc5d8","name":"1002","rules":[{"t":"set","p":"B1002","pt":"flow","to":"$not($flowContext('B1002'))\t\t","tot":"jsonata"},{"t":"set","p":"payload","pt":"msg","to":"B1002","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":787,"y":308,"wires":[["8201a4ac.c4cc"]]}]

                            
                            Das change-node setzt als Erstes die Flow-variable mit ihrem negierten Wert.
                            
                            Dann wird dieser Wert in den payload kopiert.
                            
                            Geht sicher auch noch einfacher, aber das muss ich erst überschlafen;-)
                            1 Reply Last reply Reply Quote 0
                            • D
                              dondon4002 last edited by

                              Gut, mein Ideengang war ja schonmal richtig, wusste nur nicht wie ich ne Variable Speicher.

                              Es funktioniert auch erstmal so wie es soll 😉 ob umständlich oder nicht ^^immerhin gab es eine Lösung;-)

                              Danke dir dafür schonmal

                              EDIT:

                              mist jetzt kommt natürlich das Problem 😄 Wenn ich am Switch auf "true" gehe und später das Licht per Handy ausmache.. weis der Lichtschalter das ja mal wieder nicht und würd beim nächsten einschalten "false" senden 😄 arghh

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

                                Kannst es eigentlich so lassen. Du musst nur aufpassen, dass deine Flow-variablen eindeutig bleiben. Will sagen, kein anderes node auf dem flow sollte die für andere Zwecke verwenden! Flow-Variablen sind ja auf dem kompletten flow global.

                                Man kann dafür auch einen Subflow machen, dann ist der flow-scope auf den Subflow beschränkt.

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

                                  @dondon4002:

                                  mist jetzt kommt natürlich das Problem 😄 Wenn ich am Switch auf "true" gehe und später das Licht per Handy ausmache.. weis der Lichtschalter das ja mal wieder nicht und würd beim nächsten einschalten "false" senden 😄 arghh `

                                  Normalerweise wandelt man bei solchen Sachen einen Switch zum Button. Man wertet also nicht mehr aus, ob der true oder false gesendet hat, sondern nur, das er gesendet hat.

                                  Dann ist es egal. Schalten ändert dann immer den Status der Lampe. Egal woher der Schaltimpuls kommt.

                                  Aber wie gesagt, ich kenn die Hue Dinger nicht und hab keine Ahnung, ob man das da so machen könnte.

                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    dondon4002 last edited by

                                    Das ist richtig, nur wenn ich über 4 Geräten schalte möchte ich ja am Ende wissen ob es true oder false ist oder irre ich mich da ?

                                    Ich wollte jetzt vor dem HomeKit reingehen um von da aus meinen Flow zu steuern. Damit am iPhone auch der tatsächliche status steht.

                                    Das klappt ja soweit auch gut. Problem ist halt wenn ich am iPhone sage "Lampe aus" das der Taster immer noch denkt das die Lampe an ist und beim 1. Befehl mir ein "false" sendet.

                                    Schon etwas blöd das man am ende für alles ein Response braucht

                                    Was wäre denn wenn ich den UI schalter der als letztes im Glied ist abfrage ? ob true oder false ?

                                    1 Reply Last reply Reply Quote 0
                                    • D
                                      dondon4002 last edited by

                                      Also könnte ich das Change ersetzen durch etwas anders und setze true oder false im Gegensatz zu dem UI Schalter, denn der sendet ja auch immer nach dem schalten den Status.

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

                                        @dondon4002:

                                        Also könnte ich das Change ersetzen durch etwas anders und setze true oder false im Gegensatz zu dem UI Schalter, denn der sendet ja auch immer nach dem schalten den Status. `

                                        Das sollte kein Problem sein. Dem 2. change (1002) ist ja schnurz ob im eingehen Payload true oder false drinsteht. Es negiert einfach nur flow.B1002 und kopiert das dann in den payload. Da kannst du natürlich deine eigene Logik zwischenschalten.

                                        Erstmal würde ich genau festlegen, welche Schalter/Taster (inkl. Alexa) gibt es für die bestimmte Lampe und wie soll die auf die Schalter reagieren.

                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          dondon4002 last edited by

                                          Echt schade, das jeder Entwickler verschiedene Argumente benutzt.. Alexa hat "Brightness", Hue hat "brightness", Homekit hat wieder nen anders Kommando 😄 true, false, ON: 1, ON: 2, On:true, On:false…..........

                                          Das alles in eine Reihe geschaltet zu bekommen entwickelt sich zu einem Mysterium mit vielen Switches und Changes 😄 Und nur weil ich gerne die Farbe und Helligkeit dazu schalten wollte.

                                          Bin schon kurz davor alles einzelne zu schalten und jeweils nen Response zu senden, das wird so mega Aufwendig.. hatte mir mit Node-Red eigentlich ne Vereinfachung gewünscht.

                                          Falls du noch einen Tipp dazu hättest wie ich alles mit einander verknüpfen kann gerne her damit. ansonsten ist das Projekt "Helligkeit und Farbe" gestorben 😄

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

                                            > Falls du noch einen Tipp…
                                            Ich glaub, ich kann da nicht mehr viel Erhellendes beitragen ;-( Vlt. solltest du dein spezielles HUE-Anliegen nochmal separat vortragen. Evtl. kann ja ein anderer HUE Nutzer weiterhelfen.

                                            Mir ist ehrlich gesagt das ganze Konzept diesbezüglich noch unklar.

                                            Ich hab zwar auch ne ganze Reihe Zigbee Geräte am laufen, aber die steuere ich mit ioBroker und einem CC2231 Stick.

                                            Generell sollte es ja etwa so laufen:

                                            Du hast pro Aktor eine zentrale Instanz, die die aktuellen Werte exakt wiederspiegeln (Ist ja bei Zigbee durch die Rückmeldung eigentlich gewährleistet).

                                            In ioB sind das dann die states des Aktors (An/Aus, Helligkeit usw.)

                                            Ich schalte so eine Lampe mit den verschiedensten Aktoren (Programme (NR/JS), Alexa, mechanische Schalter (Zigbee oder Fremdsysteme) usw.)

                                            Wenn ich die Lampe schalte, frage ich die zentrale Instanz nach dem Istwert und ändere die dann entsprechend. Programmen könne da auch automatisch reagieren, wenn sich der Zustand ändert.

                                            Alle UIs bekommen den dann automatisch mitgeteilt (direkt oder per Abfrage), so dass sie zumindest vor einem Schaltvorgang den Istzustand kennen.

                                            Ein Problem taucht da allenfalls bei mechanischen Schaltern (Kippschaltern) auf, wenn deren Kippstellung mit einem Zustand (An/Aus) gekoppelt sind.

                                            Hier mal ein Bild von einer Testsite wo man das erkennt.

                                            3999_nr.png

                                            1 - sind nodes, die den aktuellen Status der Steckdosen automatisch aus ioB bekommen.

                                            2 - sind die switches auf der Site. Die repräsentieren einmal den aktuellen Zustand (Eingang) und wenn sie (von Hand) geschaltet werden geben sie den Schaltbefehl an den ioB-State weiter (3)

                                            Damit ist eigentlich immer alles aktuell. Egal ob (und von wo) sonst noch ein Schaltbefehl kommt, er wird durch die Nodes (1) erkannt und weitergereicht.

                                            Aber ich fürchte fast, die prinzipielle Arbeitsweise ist dir längst bekannt und wir reden etwas aneinander vorbei 😉 deshalb ziehe ich mich an dieser Stelle mal zurück.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            566
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            2
                                            27
                                            1726
                                            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