Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. [gelöst] Eigenschaften eines Datenpunktes steuern

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    541

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

[gelöst] Eigenschaften eines Datenpunktes steuern

Scheduled Pinned Locked Moved Node-Red
5 Posts 2 Posters 439 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    superflip
    wrote on last edited by superflip
    #1

    ich möchte mittels nodered gerne die Eigenschaft "write" eines Buttons auf false setzen. Leider ist mir noch nicht klar, wie ich das anstellen soll. Der Sinn dahinter, dass ist das nochmalige Drücken des Buttons für eine bestimmte Zeit unterbinden möchte. (das mit dem Zeit hab ich schon hinbekommen) - Ich scheitere aktuell allein daran, die Eigenschaft zu setzen.

    Ich habe bisher versucht, vor dem "iobroker out" Node mit einem Switch msg.stateReadonly auf true zu setzen und dann mit "iobroker out" das ganze zu schreiben (msg.stateReadonly wäre zumindest im iobroker out Node so beschrieben.)
    Leider liefert das nicht das gewünschte Ergebnis und die Eigenschaft "write" bleibt immer auf true.
    Natürlich hab ich das ganze auch mit false probiert, ohne Erfolg.

    Für einen Tipp, wie ich es noch versuchen kann, wäre ich dankbar!

    Danke,
    Philipp

    mickymM 1 Reply Last reply
    0
    • S superflip

      ich möchte mittels nodered gerne die Eigenschaft "write" eines Buttons auf false setzen. Leider ist mir noch nicht klar, wie ich das anstellen soll. Der Sinn dahinter, dass ist das nochmalige Drücken des Buttons für eine bestimmte Zeit unterbinden möchte. (das mit dem Zeit hab ich schon hinbekommen) - Ich scheitere aktuell allein daran, die Eigenschaft zu setzen.

      Ich habe bisher versucht, vor dem "iobroker out" Node mit einem Switch msg.stateReadonly auf true zu setzen und dann mit "iobroker out" das ganze zu schreiben (msg.stateReadonly wäre zumindest im iobroker out Node so beschrieben.)
      Leider liefert das nicht das gewünschte Ergebnis und die Eigenschaft "write" bleibt immer auf true.
      Natürlich hab ich das ganze auch mit false probiert, ohne Erfolg.

      Für einen Tipp, wie ich es noch versuchen kann, wäre ich dankbar!

      Danke,
      Philipp

      mickymM Offline
      mickymM Offline
      mickym
      Most Active
      wrote on last edited by mickym
      #2

      @superflip Du kannst keine Objekteigenschaften mit NodeRed verändern. Die Eigenschaften mit der iobroker-Out Node werden nur einmalig beim Erstellen eines Objektes gesetzt.

      Du musst halt in Deinem Flow das Betätigen Deines Buttons verhindern.

      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.

      mickymM 1 Reply Last reply
      0
      • mickymM mickym

        @superflip Du kannst keine Objekteigenschaften mit NodeRed verändern. Die Eigenschaften mit der iobroker-Out Node werden nur einmalig beim Erstellen eines Objektes gesetzt.

        Du musst halt in Deinem Flow das Betätigen Deines Buttons verhindern.

        mickymM Offline
        mickymM Offline
        mickym
        Most Active
        wrote on last edited by mickym
        #3

        Mit einer Proxy JS Funktion kannst du es machen.

        Ist zwar nicht sauber - das so zu machen - da das nicht dafür vorgesehen ist, aber generell kann man so die Funktionen, die im NodeRed fehlen - bauen.

        Hier mit dieser JS Funktion - die muss halt immer laufen, kannst Du die common Attribute eines Objektes aus NodeRed setzen:

        /**
        * Zweck:      Proxy für einen NodeRed Flow - Modify Object
        * Datum:      05.03.2025
        * Autor:      @mickym
        */
        var exchangeWithNodeRed = "0_userdata.0.NodeRed.proxyObject";
        
        on({id: exchangeWithNodeRed, change: 'any', ack: false},function (param) {
        
            const nrObj = JSON.parse(param.state.val);
            // console.log(nrObj);
        
            const obj = getObject(nrObj.id);
        
            obj.common[nrObj.common] = nrObj.val;
        
        
            setObject('0_userdata.0.Test.aktiv', obj, (err) => {
                if (err) log('Cannot write object: ' + err);
            }); 
          
        });
        

        In die ID gibst Du ein welchen Datenounkt und dann unter common welche Eigenschaft und val welchen Wert Du setzen willst:

        {
           "id":"0_userdata.0.Test.aktiv",
           "common":"write",
           "val":payload
        }
        

        Damit kannst Du dann das Schreiben verbieten oder erlauben. Aber ich würde es nicht machen.

        Hier der Flow:

        [
           {
               "id": "4da11d17effa7e54",
               "type": "ioBroker out",
               "z": "30f50cdc81f34302",
               "name": "",
               "topic": "0_userdata.0.NodeRed.proxyObject",
               "ack": "false",
               "autoCreate": "false",
               "stateName": "",
               "role": "",
               "payloadType": "",
               "readonly": "",
               "stateUnit": "",
               "stateMin": "",
               "stateMax": "",
               "x": 760,
               "y": 1120,
               "wires": []
           },
           {
               "id": "4e2a780a5a12b469",
               "type": "json",
               "z": "30f50cdc81f34302",
               "name": "",
               "property": "payload",
               "action": "",
               "pretty": false,
               "x": 530,
               "y": 1120,
               "wires": [
                   [
                       "4da11d17effa7e54"
                   ]
               ]
           },
           {
               "id": "0a117e4cad8bcc84",
               "type": "change",
               "z": "30f50cdc81f34302",
               "name": "",
               "rules": [
                   {
                       "t": "set",
                       "p": "payload",
                       "pt": "msg",
                       "to": "{\t   \"id\":\"0_userdata.0.Test.aktiv\",\t   \"common\":\"write\",\t   \"val\":payload\t}",
                       "tot": "jsonata"
                   }
               ],
               "action": "",
               "property": "",
               "from": "",
               "to": "",
               "reg": false,
               "x": 350,
               "y": 1120,
               "wires": [
                   [
                       "4e2a780a5a12b469"
                   ]
               ]
           },
           {
               "id": "d2f01982a440ddd2",
               "type": "inject",
               "z": "30f50cdc81f34302",
               "name": "",
               "props": [
                   {
                       "p": "payload"
                   }
               ],
               "repeat": "",
               "crontab": "",
               "once": false,
               "onceDelay": 0.1,
               "topic": "",
               "payload": "true",
               "payloadType": "bool",
               "x": 130,
               "y": 1100,
               "wires": [
                   [
                       "0a117e4cad8bcc84"
                   ]
               ]
           },
           {
               "id": "5efe0322a667deee",
               "type": "inject",
               "z": "30f50cdc81f34302",
               "name": "",
               "props": [
                   {
                       "p": "payload"
                   }
               ],
               "repeat": "",
               "crontab": "",
               "once": false,
               "onceDelay": 0.1,
               "topic": "",
               "payload": "false",
               "payloadType": "bool",
               "x": 130,
               "y": 1140,
               "wires": [
                   [
                       "0a117e4cad8bcc84"
                   ]
               ]
           },
           {
               "id": "a4ecf857b1fd5dcf",
               "type": "comment",
               "z": "30f50cdc81f34302",
               "name": "Proxy common Objects",
               "info": "",
               "x": 140,
               "y": 1000,
               "wires": []
           }
        ]
        

        6c42a1b8-1fce-441f-9e76-d2a2fa6971dc-image.png

        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.

        S 1 Reply Last reply
        0
        • mickymM mickym

          Mit einer Proxy JS Funktion kannst du es machen.

          Ist zwar nicht sauber - das so zu machen - da das nicht dafür vorgesehen ist, aber generell kann man so die Funktionen, die im NodeRed fehlen - bauen.

          Hier mit dieser JS Funktion - die muss halt immer laufen, kannst Du die common Attribute eines Objektes aus NodeRed setzen:

          /**
          * Zweck:      Proxy für einen NodeRed Flow - Modify Object
          * Datum:      05.03.2025
          * Autor:      @mickym
          */
          var exchangeWithNodeRed = "0_userdata.0.NodeRed.proxyObject";
          
          on({id: exchangeWithNodeRed, change: 'any', ack: false},function (param) {
          
              const nrObj = JSON.parse(param.state.val);
              // console.log(nrObj);
          
              const obj = getObject(nrObj.id);
          
              obj.common[nrObj.common] = nrObj.val;
          
          
              setObject('0_userdata.0.Test.aktiv', obj, (err) => {
                  if (err) log('Cannot write object: ' + err);
              }); 
            
          });
          

          In die ID gibst Du ein welchen Datenounkt und dann unter common welche Eigenschaft und val welchen Wert Du setzen willst:

          {
             "id":"0_userdata.0.Test.aktiv",
             "common":"write",
             "val":payload
          }
          

          Damit kannst Du dann das Schreiben verbieten oder erlauben. Aber ich würde es nicht machen.

          Hier der Flow:

          [
             {
                 "id": "4da11d17effa7e54",
                 "type": "ioBroker out",
                 "z": "30f50cdc81f34302",
                 "name": "",
                 "topic": "0_userdata.0.NodeRed.proxyObject",
                 "ack": "false",
                 "autoCreate": "false",
                 "stateName": "",
                 "role": "",
                 "payloadType": "",
                 "readonly": "",
                 "stateUnit": "",
                 "stateMin": "",
                 "stateMax": "",
                 "x": 760,
                 "y": 1120,
                 "wires": []
             },
             {
                 "id": "4e2a780a5a12b469",
                 "type": "json",
                 "z": "30f50cdc81f34302",
                 "name": "",
                 "property": "payload",
                 "action": "",
                 "pretty": false,
                 "x": 530,
                 "y": 1120,
                 "wires": [
                     [
                         "4da11d17effa7e54"
                     ]
                 ]
             },
             {
                 "id": "0a117e4cad8bcc84",
                 "type": "change",
                 "z": "30f50cdc81f34302",
                 "name": "",
                 "rules": [
                     {
                         "t": "set",
                         "p": "payload",
                         "pt": "msg",
                         "to": "{\t   \"id\":\"0_userdata.0.Test.aktiv\",\t   \"common\":\"write\",\t   \"val\":payload\t}",
                         "tot": "jsonata"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 350,
                 "y": 1120,
                 "wires": [
                     [
                         "4e2a780a5a12b469"
                     ]
                 ]
             },
             {
                 "id": "d2f01982a440ddd2",
                 "type": "inject",
                 "z": "30f50cdc81f34302",
                 "name": "",
                 "props": [
                     {
                         "p": "payload"
                     }
                 ],
                 "repeat": "",
                 "crontab": "",
                 "once": false,
                 "onceDelay": 0.1,
                 "topic": "",
                 "payload": "true",
                 "payloadType": "bool",
                 "x": 130,
                 "y": 1100,
                 "wires": [
                     [
                         "0a117e4cad8bcc84"
                     ]
                 ]
             },
             {
                 "id": "5efe0322a667deee",
                 "type": "inject",
                 "z": "30f50cdc81f34302",
                 "name": "",
                 "props": [
                     {
                         "p": "payload"
                     }
                 ],
                 "repeat": "",
                 "crontab": "",
                 "once": false,
                 "onceDelay": 0.1,
                 "topic": "",
                 "payload": "false",
                 "payloadType": "bool",
                 "x": 130,
                 "y": 1140,
                 "wires": [
                     [
                         "0a117e4cad8bcc84"
                     ]
                 ]
             },
             {
                 "id": "a4ecf857b1fd5dcf",
                 "type": "comment",
                 "z": "30f50cdc81f34302",
                 "name": "Proxy common Objects",
                 "info": "",
                 "x": 140,
                 "y": 1000,
                 "wires": []
             }
          ]
          

          6c42a1b8-1fce-441f-9e76-d2a2fa6971dc-image.png

          S Offline
          S Offline
          superflip
          wrote on last edited by
          #4

          @mickym danke schon mal für die ausführlich Info. Grundsätzlich will ich verhindern, dass irgendjemand in der VIS-2 den Button nochmals drücken kann (also ich möchte das eigentlich so früh wie möglich abfangen, nicht erst in den Skripts dahinter). - leider funktioniert das mit dem Verbinden von Eigenschaften (in dem Fall readonly) im VIS nicht so wirklich (hab dazu einen anderen Post unter Visualisierung schon abgesetzt), das wäre für mich eigentlich die "saubere" Variante.

          Ich würde jetzt nach deinem Hinweis zuerst checken, ob eine Variable (nennen wir sie mal "aktiv"), true ist - wenn ja -> Abbruch, wenn nein setze sie auf true und führe den Flow aus - am Ende wird diese Variable wieder auf false gesetzt.
          Diesen Check müsste ich dann natürlich in weiteren möglichen Flows einbauen, die auf diesen Button zugreifen, falls ich welche habe.

          Oder gibt es hier eine smartere Variante?

          Danke,
          Philipp

          mickymM 1 Reply Last reply
          0
          • S superflip

            @mickym danke schon mal für die ausführlich Info. Grundsätzlich will ich verhindern, dass irgendjemand in der VIS-2 den Button nochmals drücken kann (also ich möchte das eigentlich so früh wie möglich abfangen, nicht erst in den Skripts dahinter). - leider funktioniert das mit dem Verbinden von Eigenschaften (in dem Fall readonly) im VIS nicht so wirklich (hab dazu einen anderen Post unter Visualisierung schon abgesetzt), das wäre für mich eigentlich die "saubere" Variante.

            Ich würde jetzt nach deinem Hinweis zuerst checken, ob eine Variable (nennen wir sie mal "aktiv"), true ist - wenn ja -> Abbruch, wenn nein setze sie auf true und führe den Flow aus - am Ende wird diese Variable wieder auf false gesetzt.
            Diesen Check müsste ich dann natürlich in weiteren möglichen Flows einbauen, die auf diesen Button zugreifen, falls ich welche habe.

            Oder gibt es hier eine smartere Variante?

            Danke,
            Philipp

            mickymM Offline
            mickymM Offline
            mickym
            Most Active
            wrote on last edited by
            #5

            @superflip nein das mit der Variablen, kann ja auch ein weiterer Datenpunkt sein, das wäre die saubere Lösung

            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 Reply Last reply
            0
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            Support us

            ioBroker
            Community Adapters
            Donate

            492

            Online

            32.7k

            Users

            82.5k

            Topics

            1.3m

            Posts
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Login

            • Don't have an account? Register

            • Login or register to search.
            • First post
              Last post
            0
            • Home
            • Recent
            • Tags
            • Unread 0
            • Categories
            • Unreplied
            • Popular
            • GitHub
            • Docu
            • Hilfe