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. Datenpunkt mit 4 vier verschiedene Zustände

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Datenpunkt mit 4 vier verschiedene Zustände

Geplant Angeheftet Gesperrt Verschoben Node-Red
9 Beiträge 3 Kommentatoren 401 Aufrufe 3 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.
  • ? Offline
    ? Offline
    Ein ehemaliger Benutzer
    schrieb am zuletzt editiert von
    #1

    Ich bräuchte einen Denkanstoß ;-)
    Folgendes Problem was ich gerne mit Node Red lösen möchte. Ein Garagentor wird über ein Relais (Tasmota) angesteuert und fällt selbständig wieder ab, also der üblich Impuls zur externen Ansteuerung. Der gleiche Controller (esp8266) fragt auch die beiden Zustände "Tor AUF" bzw "Tor ZU" ab und übermittelt diese per MQTT.
    Jetzt möchte ich einen Datenpunkt füllen mit folgenden Zuständen...

    Tor ist geschlossen ≜ 0
    Tor öffnet sich ≜ 1
    Tor ist geöffnet ≜ 2
    Tor schließt sich ≜ 3

    Geschlossen und geöffnet sind nicht das Problem. Da ich für den Aktor keinen eindeutigen Zustand habe kann ich diesen nicht abfragen...bzw denke ich das. Ich möchte erkennen ob das Tor gerade geöffnet bzw geschlossen wird. Ich hoffe man wird schlau aus dem was ich hier von mir gegeben habe. Das Ganze ist übrigens für die Visualisierung gedacht. Vermutlich denke ich mal wieder viel zu kompliziert :face_with_rolling_eyes:

    M 1 Antwort Letzte Antwort
    0
    • ? Ein ehemaliger Benutzer

      Ich bräuchte einen Denkanstoß ;-)
      Folgendes Problem was ich gerne mit Node Red lösen möchte. Ein Garagentor wird über ein Relais (Tasmota) angesteuert und fällt selbständig wieder ab, also der üblich Impuls zur externen Ansteuerung. Der gleiche Controller (esp8266) fragt auch die beiden Zustände "Tor AUF" bzw "Tor ZU" ab und übermittelt diese per MQTT.
      Jetzt möchte ich einen Datenpunkt füllen mit folgenden Zuständen...

      Tor ist geschlossen ≜ 0
      Tor öffnet sich ≜ 1
      Tor ist geöffnet ≜ 2
      Tor schließt sich ≜ 3

      Geschlossen und geöffnet sind nicht das Problem. Da ich für den Aktor keinen eindeutigen Zustand habe kann ich diesen nicht abfragen...bzw denke ich das. Ich möchte erkennen ob das Tor gerade geöffnet bzw geschlossen wird. Ich hoffe man wird schlau aus dem was ich hier von mir gegeben habe. Das Ganze ist übrigens für die Visualisierung gedacht. Vermutlich denke ich mal wieder viel zu kompliziert :face_with_rolling_eyes:

      M Online
      M Online
      MCU
      schrieb am zuletzt editiert von
      #2

      @noah3112 Kann man da den vorherigen Zustand nicht abfragen?
      Wenn alter Zustand geschlossen und jetzt nicht mehr -> es wird geöffnet
      Wenn alter Zustand geöffnet und jetzt nicht mehr -> es wird geschlossen

      NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
      Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

      ? 1 Antwort Letzte Antwort
      0
      • M MCU

        @noah3112 Kann man da den vorherigen Zustand nicht abfragen?
        Wenn alter Zustand geschlossen und jetzt nicht mehr -> es wird geöffnet
        Wenn alter Zustand geöffnet und jetzt nicht mehr -> es wird geschlossen

        ? Offline
        ? Offline
        Ein ehemaliger Benutzer
        schrieb am zuletzt editiert von
        #3

        @mcu Wow schnelle Antwort...Danke! Doch klar kann man. Ich sage es doch zu kompliziert gedacht. wie könnte man das umsetzen? In eine Variable speichern?

        M 1 Antwort Letzte Antwort
        0
        • ? Ein ehemaliger Benutzer

          @mcu Wow schnelle Antwort...Danke! Doch klar kann man. Ich sage es doch zu kompliziert gedacht. wie könnte man das umsetzen? In eine Variable speichern?

          M Online
          M Online
          MCU
          schrieb am zuletzt editiert von
          #4

          @noah3112 Keine Ahnung, habe leider kein node-red. Ist vielleicht irgendwann ein Thema.

          NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
          Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

          ? 1 Antwort Letzte Antwort
          0
          • M MCU

            @noah3112 Keine Ahnung, habe leider kein node-red. Ist vielleicht irgendwann ein Thema.

            ? Offline
            ? Offline
            Ein ehemaliger Benutzer
            schrieb am zuletzt editiert von
            #5

            @mcu Ich versuche mich auch erst seit kurzem in Node Red. Vielleicht hätte ich es mit Blockly schon gelöst. Aber ich möchte gerne in Node Red weiterkommen. Trotzdem danke fürs antworten.

            M 1 Antwort Letzte Antwort
            0
            • ? Ein ehemaliger Benutzer

              @mcu Ich versuche mich auch erst seit kurzem in Node Red. Vielleicht hätte ich es mit Blockly schon gelöst. Aber ich möchte gerne in Node Red weiterkommen. Trotzdem danke fürs antworten.

              M Online
              M Online
              MCU
              schrieb am zuletzt editiert von
              #6

              @noah3112 @mickym ist der node-red Spezialist.

              NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
              Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

              ? 1 Antwort Letzte Antwort
              0
              • M MCU

                @noah3112 @mickym ist der node-red Spezialist.

                ? Offline
                ? Offline
                Ein ehemaliger Benutzer
                schrieb am zuletzt editiert von
                #7

                @mcu Ich weiß ;-)

                1 Antwort Letzte Antwort
                0
                • mickymM Online
                  mickymM Online
                  mickym
                  Most Active
                  schrieb am zuletzt editiert von mickym
                  #8

                  Also: ;)

                  Hier ist Node Red leider etwas im Nachteil gegenüber Blockly, da der vorige Wert nicht ausgelesen werden kann, aber man kann das auf verschiedene Art und Weise ausgleichen. Ihr könnt ja zur Abwechslung auch mal ein Issue - als Erweiterungs-Request auf gitHub erstellen. Aber was man dafür kann ( dass man aktiv - mit einer get Node - einen Wert auslesen kann, auch wenn ein anderer Wert triggert).

                  Eventuell braucht man ja auch nicht mal eine Variable, aber man braucht quasi ein Trigger der zumindest sagt, ob das Tor in Bewegung ist oder nicht.

                  Wenn dies Triggert (also Tor in Bewegung ist) liest man den Zustandsdatenpunkt aus und kann somit die Bewegungsrichtung festlegen. Ist das Tor still, sollte dann der Zustandsdatenpunkt automatisch aktualisiert werden.

                  Das wäre meine präferierte Lösung (siehe Flow am Ende dieses Posts).

                  Ansonsten kann man mit NodeRed nur den aktuellen Wert mit dem vorigen Wert in einer switch Node relativ vergleichen.
                  a479e8c0-dfe4-4870-b6ab-7ad60d0309af-image.png

                  Wenn man absolute Werte benötigt, um diese mit dem vorangegangenen Wert zu vergleichen - dann muss man halt wirklich eine function Node bemühen:

                  Diese function Node gibt den vorigen (msg.previous) und den aktuellen Wert (msg.payload) aus.

                  8e7892c1-a171-40a0-839d-e37fa1cb7d4f-image.png

                  bc0976f6-c384-4ce9-925e-5b9791ef9d7c-image.png

                  var previous = context.get('previous')
                  
                  if (previous !== undefined){
                      msg.previous=previous;
                  }
                  
                  context.set('previous',msg.payload)
                  return msg;
                  

                  Ansonsten - wie gesagt wenn man ein Trigger hat, der meldet dass das Tor in Bewegung ist (Relais Level) oder was weiss ich, dann könnte der Flow in etwa so aussehen.

                  1fad6892-da47-440f-aef5-ec47aba88647-image.png

                  Ohne einen Trigger, der signalisiert, dass das Tor in Bewegung ist, wird das aber nichts.

                  [
                     {
                         "id": "7acb07e532304c01",
                         "type": "debug",
                         "z": "a442b54b44edc349",
                         "name": "Status",
                         "active": true,
                         "tosidebar": true,
                         "console": false,
                         "tostatus": false,
                         "complete": "payload",
                         "targetType": "msg",
                         "statusVal": "",
                         "statusType": "auto",
                         "x": 1050,
                         "y": 1100,
                         "wires": []
                     },
                     {
                         "id": "fde0da45bf64ef5b",
                         "type": "ioBroker in",
                         "z": "a442b54b44edc349",
                         "name": "Tor in Bewegung",
                         "topic": "0_userdata.0.Test.aktiv",
                         "payloadType": "value",
                         "onlyack": "",
                         "func": "all",
                         "gap": "",
                         "fireOnStart": "false",
                         "outFormat": "MQTT",
                         "x": 140,
                         "y": 1140,
                         "wires": [
                             [
                                 "8453ee2cdf0f5d5b"
                             ]
                         ]
                     },
                     {
                         "id": "706b23e2fc57eb86",
                         "type": "ioBroker in",
                         "z": "a442b54b44edc349",
                         "name": "Status Garagentor (opened/closed)",
                         "topic": "0_userdata.0.Test.garage",
                         "payloadType": "value",
                         "onlyack": "",
                         "func": "all",
                         "gap": "",
                         "fireOnStart": "false",
                         "outFormat": "MQTT",
                         "x": 200,
                         "y": 1060,
                         "wires": [
                             [
                                 "6b1c4d526744cc87"
                             ]
                         ]
                     },
                     {
                         "id": "6b1c4d526744cc87",
                         "type": "change",
                         "z": "a442b54b44edc349",
                         "name": "",
                         "rules": [
                             {
                                 "t": "change",
                                 "p": "payload",
                                 "pt": "msg",
                                 "from": "opened",
                                 "fromt": "str",
                                 "to": "2",
                                 "tot": "num"
                             },
                             {
                                 "t": "change",
                                 "p": "payload",
                                 "pt": "msg",
                                 "from": "closed",
                                 "fromt": "str",
                                 "to": "0",
                                 "tot": "num"
                             }
                         ],
                         "action": "",
                         "property": "",
                         "from": "",
                         "to": "",
                         "reg": false,
                         "x": 830,
                         "y": 1060,
                         "wires": [
                             [
                                 "7acb07e532304c01"
                             ]
                         ]
                     },
                     {
                         "id": "1492a4bb655079bf",
                         "type": "ioBroker get",
                         "z": "a442b54b44edc349",
                         "name": "Status Garagentor",
                         "topic": "0_userdata.0.Test.garage",
                         "attrname": "payload",
                         "payloadType": "value",
                         "errOnInvalidState": "nothing",
                         "x": 590,
                         "y": 1140,
                         "wires": [
                             [
                                 "b46dd382e03d0c2e"
                             ]
                         ]
                     },
                     {
                         "id": "8453ee2cdf0f5d5b",
                         "type": "switch",
                         "z": "a442b54b44edc349",
                         "name": "nur wenn in Bewegung",
                         "property": "payload",
                         "propertyType": "msg",
                         "rules": [
                             {
                                 "t": "true"
                             }
                         ],
                         "checkall": "true",
                         "repair": false,
                         "outputs": 1,
                         "x": 360,
                         "y": 1140,
                         "wires": [
                             [
                                 "1492a4bb655079bf"
                             ]
                         ]
                     },
                     {
                         "id": "b46dd382e03d0c2e",
                         "type": "change",
                         "z": "a442b54b44edc349",
                         "name": "",
                         "rules": [
                             {
                                 "t": "change",
                                 "p": "payload",
                                 "pt": "msg",
                                 "from": "opened",
                                 "fromt": "str",
                                 "to": "3",
                                 "tot": "num"
                             },
                             {
                                 "t": "change",
                                 "p": "payload",
                                 "pt": "msg",
                                 "from": "closed",
                                 "fromt": "str",
                                 "to": "1",
                                 "tot": "num"
                             }
                         ],
                         "action": "",
                         "property": "",
                         "from": "",
                         "to": "",
                         "reg": false,
                         "x": 830,
                         "y": 1140,
                         "wires": [
                             [
                                 "7acb07e532304c01"
                             ]
                         ]
                     }
                  ]
                  

                  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
                  • mickymM mickym

                    Also: ;)

                    Hier ist Node Red leider etwas im Nachteil gegenüber Blockly, da der vorige Wert nicht ausgelesen werden kann, aber man kann das auf verschiedene Art und Weise ausgleichen. Ihr könnt ja zur Abwechslung auch mal ein Issue - als Erweiterungs-Request auf gitHub erstellen. Aber was man dafür kann ( dass man aktiv - mit einer get Node - einen Wert auslesen kann, auch wenn ein anderer Wert triggert).

                    Eventuell braucht man ja auch nicht mal eine Variable, aber man braucht quasi ein Trigger der zumindest sagt, ob das Tor in Bewegung ist oder nicht.

                    Wenn dies Triggert (also Tor in Bewegung ist) liest man den Zustandsdatenpunkt aus und kann somit die Bewegungsrichtung festlegen. Ist das Tor still, sollte dann der Zustandsdatenpunkt automatisch aktualisiert werden.

                    Das wäre meine präferierte Lösung (siehe Flow am Ende dieses Posts).

                    Ansonsten kann man mit NodeRed nur den aktuellen Wert mit dem vorigen Wert in einer switch Node relativ vergleichen.
                    a479e8c0-dfe4-4870-b6ab-7ad60d0309af-image.png

                    Wenn man absolute Werte benötigt, um diese mit dem vorangegangenen Wert zu vergleichen - dann muss man halt wirklich eine function Node bemühen:

                    Diese function Node gibt den vorigen (msg.previous) und den aktuellen Wert (msg.payload) aus.

                    8e7892c1-a171-40a0-839d-e37fa1cb7d4f-image.png

                    bc0976f6-c384-4ce9-925e-5b9791ef9d7c-image.png

                    var previous = context.get('previous')
                    
                    if (previous !== undefined){
                        msg.previous=previous;
                    }
                    
                    context.set('previous',msg.payload)
                    return msg;
                    

                    Ansonsten - wie gesagt wenn man ein Trigger hat, der meldet dass das Tor in Bewegung ist (Relais Level) oder was weiss ich, dann könnte der Flow in etwa so aussehen.

                    1fad6892-da47-440f-aef5-ec47aba88647-image.png

                    Ohne einen Trigger, der signalisiert, dass das Tor in Bewegung ist, wird das aber nichts.

                    [
                       {
                           "id": "7acb07e532304c01",
                           "type": "debug",
                           "z": "a442b54b44edc349",
                           "name": "Status",
                           "active": true,
                           "tosidebar": true,
                           "console": false,
                           "tostatus": false,
                           "complete": "payload",
                           "targetType": "msg",
                           "statusVal": "",
                           "statusType": "auto",
                           "x": 1050,
                           "y": 1100,
                           "wires": []
                       },
                       {
                           "id": "fde0da45bf64ef5b",
                           "type": "ioBroker in",
                           "z": "a442b54b44edc349",
                           "name": "Tor in Bewegung",
                           "topic": "0_userdata.0.Test.aktiv",
                           "payloadType": "value",
                           "onlyack": "",
                           "func": "all",
                           "gap": "",
                           "fireOnStart": "false",
                           "outFormat": "MQTT",
                           "x": 140,
                           "y": 1140,
                           "wires": [
                               [
                                   "8453ee2cdf0f5d5b"
                               ]
                           ]
                       },
                       {
                           "id": "706b23e2fc57eb86",
                           "type": "ioBroker in",
                           "z": "a442b54b44edc349",
                           "name": "Status Garagentor (opened/closed)",
                           "topic": "0_userdata.0.Test.garage",
                           "payloadType": "value",
                           "onlyack": "",
                           "func": "all",
                           "gap": "",
                           "fireOnStart": "false",
                           "outFormat": "MQTT",
                           "x": 200,
                           "y": 1060,
                           "wires": [
                               [
                                   "6b1c4d526744cc87"
                               ]
                           ]
                       },
                       {
                           "id": "6b1c4d526744cc87",
                           "type": "change",
                           "z": "a442b54b44edc349",
                           "name": "",
                           "rules": [
                               {
                                   "t": "change",
                                   "p": "payload",
                                   "pt": "msg",
                                   "from": "opened",
                                   "fromt": "str",
                                   "to": "2",
                                   "tot": "num"
                               },
                               {
                                   "t": "change",
                                   "p": "payload",
                                   "pt": "msg",
                                   "from": "closed",
                                   "fromt": "str",
                                   "to": "0",
                                   "tot": "num"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 830,
                           "y": 1060,
                           "wires": [
                               [
                                   "7acb07e532304c01"
                               ]
                           ]
                       },
                       {
                           "id": "1492a4bb655079bf",
                           "type": "ioBroker get",
                           "z": "a442b54b44edc349",
                           "name": "Status Garagentor",
                           "topic": "0_userdata.0.Test.garage",
                           "attrname": "payload",
                           "payloadType": "value",
                           "errOnInvalidState": "nothing",
                           "x": 590,
                           "y": 1140,
                           "wires": [
                               [
                                   "b46dd382e03d0c2e"
                               ]
                           ]
                       },
                       {
                           "id": "8453ee2cdf0f5d5b",
                           "type": "switch",
                           "z": "a442b54b44edc349",
                           "name": "nur wenn in Bewegung",
                           "property": "payload",
                           "propertyType": "msg",
                           "rules": [
                               {
                                   "t": "true"
                               }
                           ],
                           "checkall": "true",
                           "repair": false,
                           "outputs": 1,
                           "x": 360,
                           "y": 1140,
                           "wires": [
                               [
                                   "1492a4bb655079bf"
                               ]
                           ]
                       },
                       {
                           "id": "b46dd382e03d0c2e",
                           "type": "change",
                           "z": "a442b54b44edc349",
                           "name": "",
                           "rules": [
                               {
                                   "t": "change",
                                   "p": "payload",
                                   "pt": "msg",
                                   "from": "opened",
                                   "fromt": "str",
                                   "to": "3",
                                   "tot": "num"
                               },
                               {
                                   "t": "change",
                                   "p": "payload",
                                   "pt": "msg",
                                   "from": "closed",
                                   "fromt": "str",
                                   "to": "1",
                                   "tot": "num"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 830,
                           "y": 1140,
                           "wires": [
                               [
                                   "7acb07e532304c01"
                               ]
                           ]
                       }
                    ]
                    

                    ? Offline
                    ? Offline
                    Ein ehemaliger Benutzer
                    schrieb am zuletzt editiert von
                    #9

                    @mickym Moin :-)
                    Das ist doch schon mal ein Ansatz. Danke! Eigentlich habe ich ja den Trigger das sollte doch zu schaffen sein. Ich werde es testen und ein Feedback geben.

                    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

                    715

                    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