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. [gelöst] Eigenschaften eines Datenpunktes steuern

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[gelöst] Eigenschaften eines Datenpunktes steuern

Geplant Angeheftet Gesperrt Verschoben Node-Red
5 Beiträge 2 Kommentatoren 391 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.
  • S Offline
    S Offline
    superflip
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            682

            Online

            32.6k

            Benutzer

            82.1k

            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