Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Datenpunkt mit 4 vier verschiedene Zustände

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Datenpunkt mit 4 vier verschiedene Zustände

    This topic has been deleted. Only users with topic management privileges can see it.
    • ?
      A Former User last edited by

      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 🙄

      M 1 Reply Last reply Reply Quote 0
      • M
        MCU @Guest last edited by

        @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

        ? 1 Reply Last reply Reply Quote 0
        • ?
          A Former User @MCU last edited by

          @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 Reply Last reply Reply Quote 0
          • M
            MCU @Guest last edited by

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

            ? 1 Reply Last reply Reply Quote 0
            • ?
              A Former User @MCU last edited by

              @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 Reply Last reply Reply Quote 0
              • M
                MCU @Guest last edited by

                @noah3112 @mickym ist der node-red Spezialist.

                ? 1 Reply Last reply Reply Quote 0
                • ?
                  A Former User @MCU last edited by

                  @mcu Ich weiß 😉

                  1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active last edited by 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"
                               ]
                           ]
                       }
                    ]
                    

                    ? 1 Reply Last reply Reply Quote 1
                    • ?
                      A Former User @mickym last edited by

                      @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 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      814
                      Online

                      31.7k
                      Users

                      79.8k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      351
                      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