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. [gelöst] Überwachung eingeschaltete Verbraucher

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    [gelöst] Überwachung eingeschaltete Verbraucher

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

      Ich hab hier was in Node Red versucht, was nicht wie gewünscht funktioniert.
      Überwachung Leuchten.jpg
      "Überwachung Leuchten Garten" soll true werden, wenn eine von beiden oder beide Leuchten true sind.
      Kann mir da vielleicht jemand auf die Sprünge helfen. In Blockly habe ich es gebaut und es funktioniert. Nun möchte ich es aber in Node Red realisieren.

      H 1 Reply Last reply Reply Quote 0
      • H
        Hc-Yami @Tontechniker last edited by

        @tontechniker ich nutze dafür das node "boolean logic":
        https://flows.nodered.org/node/node-red-contrib-boolean-logic

        4ccecb8b-dc46-4f98-a850-b04b4bce0d50-grafik.png

        Anstelle des AND wäre es bei dir natürlich OR-Gatter.

        Grüße

        T 1 Reply Last reply Reply Quote 0
        • T
          Tontechniker @Hc-Yami last edited by

          @hc-yami
          Hallo!
          Wie installiere ich die zusätzliche Logic in Node Red?

          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @Tontechniker last edited by mickym

            @tontechniker Es geht aber auch ohne zusätzliche Nodes - man kann diese zwar installieren - entweder über den Adapter oder über den Pallettenmanager.
            Wenn Du es über den Adapter einträgst, wird es vom backitup Adapter dann wieder mitinstalliert, dafür siehst Du die Versionen nicht:

            79e4a886-7fc9-454d-8d86-bf38605c471a-image.png

            oder über den Pallettenmanager in NodeRed -
            176a7474-3150-4603-94eb-6556910dd50e-image.png

            das hat den Vorteil, dass Du direkt zusätzliche Nodes suchen kannst, um das System zu erweitern:

            f7ce2ee8-37de-4ee4-8133-7cf9a6bacbc1-image.png
            Ausserdem sieht man dort auch gleich, ob es eine neue Version von einzelnen Nodes gibt. Das ist vergleichbar mit Adaptern im iobroker!


            Ich bin aber bei den logischen Verknüfungen bislang ohne zusätzliche Nodes ausgekommen.

            In dem Fall habe ich mir 2 Function Nodes gebastelt 😉 und in die Bibliothek übernommen.
            8ef231f6-6cd2-46ca-bf27-552857a73f5a-image.png
            ODER:

            var x;
            var obj = msg.payload;
            var bIsBoolean=false;
            
            for (x in obj) {
              bIsBoolean = bIsBoolean || obj[x];
              
            }
            
            msg.payload=bIsBoolean;
            return msg;
            

            40beb74b-4364-4b0b-841a-1d88802160ca-image.png
            UND:

            var x;
            var obj = msg.payload;
            var bIsBoolean=true;
            
            for (x in obj) {
              bIsBoolean = bIsBoolean && obj[x];
              
            }
            
            msg.payload=bIsBoolean;
            return msg;
            

            und nutze diese Methode - zur Überwachung.

            Bei nur 2 kann man auch eine Kombi aus iobroker-IN und iobroker-GET nutzen und diese dann mit einer Change Node auswerten.

            Wie gesagt die Methode, die ich nutze ist insofern einfach, da Du dann einfach ein neues Gerät dranhängst.

            So hier mal zum Ausprobieren:

            12e90c07-4d3b-4cc6-b623-ccec3e135338-image.png

            und hier der Flow:

            [
               {
                   "id": "5dd6c628.eabcc8",
                   "type": "function",
                   "z": "ddd9c66f.f652d8",
                   "name": "OR - only one object need to be TRUE ",
                   "func": "var x;\nvar obj = msg.payload;\nvar bIsBoolean=false;\n\nfor (x in obj) {\n  bIsBoolean = bIsBoolean || obj[x];\n  \n}\n\nmsg.payload=bIsBoolean;\nreturn msg;\n",
                   "outputs": 1,
                   "noerr": 0,
                   "initialize": "",
                   "finalize": "",
                   "libs": [],
                   "x": 950,
                   "y": 280,
                   "wires": [
                       [
                           "f16f42a4.2d9ca"
                       ]
                   ]
               },
               {
                   "id": "77b979f1.0e0fb8",
                   "type": "inject",
                   "z": "ddd9c66f.f652d8",
                   "name": "",
                   "props": [
                       {
                           "p": "payload"
                       },
                       {
                           "p": "topic",
                           "vt": "str"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "Rundumleuchten",
                   "payload": "true",
                   "payloadType": "bool",
                   "x": 520,
                   "y": 240,
                   "wires": [
                       [
                           "50c11015.09b72"
                       ]
                   ]
               },
               {
                   "id": "f608bbdb.2e1878",
                   "type": "inject",
                   "z": "ddd9c66f.f652d8",
                   "name": "Wege",
                   "props": [
                       {
                           "p": "payload"
                       },
                       {
                           "p": "topic",
                           "vt": "str"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "Wege",
                   "payload": "false",
                   "payloadType": "bool",
                   "x": 530,
                   "y": 300,
                   "wires": [
                       [
                           "50c11015.09b72"
                       ]
                   ]
               },
               {
                   "id": "50c11015.09b72",
                   "type": "join",
                   "z": "ddd9c66f.f652d8",
                   "name": "",
                   "mode": "custom",
                   "build": "object",
                   "property": "payload",
                   "propertyType": "msg",
                   "key": "topic",
                   "joiner": "\\n",
                   "joinerType": "str",
                   "accumulate": true,
                   "timeout": "",
                   "count": "1",
                   "reduceRight": false,
                   "reduceExp": "",
                   "reduceInit": "",
                   "reduceInitType": "",
                   "reduceFixup": "",
                   "x": 710,
                   "y": 280,
                   "wires": [
                       [
                           "5dd6c628.eabcc8"
                       ]
                   ]
               },
               {
                   "id": "f16f42a4.2d9ca",
                   "type": "debug",
                   "z": "ddd9c66f.f652d8",
                   "name": "Überwachung Garten",
                   "active": true,
                   "tosidebar": true,
                   "console": false,
                   "tostatus": false,
                   "complete": "payload",
                   "targetType": "msg",
                   "statusVal": "",
                   "statusType": "auto",
                   "x": 1250,
                   "y": 280,
                   "wires": []
               },
               {
                   "id": "b7d97386.7c2f6",
                   "type": "inject",
                   "z": "ddd9c66f.f652d8",
                   "name": "reset",
                   "props": [
                       {
                           "p": "reset",
                           "v": "true",
                           "vt": "bool"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "x": 570,
                   "y": 120,
                   "wires": [
                       [
                           "50c11015.09b72"
                       ]
                   ]
               }
            ]
            

            Falls Du später einmal, dass Ergebnis Deiner Überwachung in einem anderen Flow brauchst, kannst Du so das ganze Objekt in einen JSON String umwandeln und in einem Datenpunkt abspeichern und später wieder holen. Sprich meine Geräte werden alle überwacht und in unterschiedliche Datenpunkte (z. Bsp. Batterieüberwachung, Schaltzustand wie bei Dir gerade, Online Status etc.) gespeichert. Ändert sich was triggert das einen ganz anderen Flow um mir einen Alarm zu signalisieren.

            Hier mal ein Beispiel für die Online Überwachung - sprich Geräte sind im Netz ansprechbar.

            Zusammen mit den Dir bestens bekannten Trigger-Nodes aus der Statusüberwachung kann man sich dann ein hervorragendes Überwachungssystem basteln. 😉

            904dd999-5588-47fb-b46f-61cadee72145-image.png

            So sieht dann der Inhalt des Datenpunktes aus dem Flow aus:

            {"Thermometer Bad":true,"Präsenz Küche":true,"Präsenz Büro":true,"Würfel Wohnzimmer":true,"Präsenz Bad":true,"Präsenz Wohnzimmer Essbereich":true,"Präsenz Wohnzimmer":true,"Präsenz Diele":true,"Thermometer Küche":true,"Präsenz Flur":true,"Würfel Schlafzimmer":true,"Präsenz Schlafzimmer":true}
            

            Um das Ganze wieder in einem ALARM Flow zu verarbeiten - einfach wieder den JSON String in ein Objekt umwandeln und mit den von mir vorgestellten Logik - Nodes verarbeiten. In diesem Fall soll es ja Alarm geben, wenn ein Gerät offline ist, deshalb hier im Gegensatz zu Deiner Anforderung die UND Node:

            67ee0e4d-712e-4546-81fe-6a03540bca42-image.png

            So kann man dann in seiner Visualisierung Gerätegruppen zum Verbindungsstatus überwachen:

            5e4a5f6b-3ecc-4b94-bcab-3c780d5a4bac-image.png

            mickym 1 Reply Last reply Reply Quote 1
            • mickym
              mickym Most Active @mickym last edited by mickym

              @Tontechniker

              Heute würde ich übrigens den Flow zur Überwachung noch etwas anders machen. Da nun die Wildcards funktionieren, ergeben sich neue Möglichkeiten 😉 .

              Aber das hat bei mir anfangs nicht funktioniert, deswegen das sind Flows - als ich noch mehr in den Kinderschuhen steckte.

              Heute kann man den Flow ganz schnell vereinfachen:

              dd5c2c39-3251-408d-825f-bfa1b246ffed-image.png

              [
                 {
                     "id": "63b3416e.7b51d",
                     "type": "debug",
                     "z": "d31cee8e.b9b1a",
                     "name": "Objekt",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 990,
                     "y": 420,
                     "wires": []
                 },
                 {
                     "id": "3f1f91ad.64efde",
                     "type": "join",
                     "z": "d31cee8e.b9b1a",
                     "name": "",
                     "mode": "custom",
                     "build": "object",
                     "property": "payload",
                     "propertyType": "msg",
                     "key": "topic",
                     "joiner": "\\n",
                     "joinerType": "str",
                     "accumulate": true,
                     "timeout": "",
                     "count": "1",
                     "reduceRight": false,
                     "reduceExp": "",
                     "reduceInit": "",
                     "reduceInitType": "",
                     "reduceFixup": "",
                     "x": 810,
                     "y": 420,
                     "wires": [
                         [
                             "63b3416e.7b51d",
                             "6564d620.5d7168"
                         ]
                     ]
                 },
                 {
                     "id": "6564d620.5d7168",
                     "type": "json",
                     "z": "d31cee8e.b9b1a",
                     "name": "",
                     "property": "payload",
                     "action": "",
                     "pretty": false,
                     "x": 1000,
                     "y": 480,
                     "wires": [
                         [
                             "f89bf821.7fafb8"
                         ]
                     ]
                 },
                 {
                     "id": "f89bf821.7fafb8",
                     "type": "debug",
                     "z": "d31cee8e.b9b1a",
                     "name": "JSON String",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "payload",
                     "targetType": "msg",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 1170,
                     "y": 480,
                     "wires": []
                 },
                 {
                     "id": "b920bc98.99539",
                     "type": "ioBroker in",
                     "z": "d31cee8e.b9b1a",
                     "name": "",
                     "topic": "zigbee.0.*.available",
                     "payloadType": "value",
                     "onlyack": "",
                     "func": "all",
                     "gap": "",
                     "fireOnStart": "false",
                     "x": 250,
                     "y": 420,
                     "wires": [
                         [
                             "a7a458ba.812fb8"
                         ]
                     ]
                 },
                 {
                     "id": "a7a458ba.812fb8",
                     "type": "ioBroker list",
                     "z": "d31cee8e.b9b1a",
                     "name": "",
                     "topic": "",
                     "objType": "state",
                     "regex": "",
                     "asArray": "false",
                     "onlyIDs": "false",
                     "withValues": "true",
                     "x": 450,
                     "y": 420,
                     "wires": [
                         [
                             "55387a39.997264"
                         ]
                     ]
                 },
                 {
                     "id": "55387a39.997264",
                     "type": "change",
                     "z": "d31cee8e.b9b1a",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "topic",
                             "pt": "msg",
                             "to": "payload.common.name",
                             "tot": "msg"
                         },
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "payload.val",
                             "tot": "msg"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 630,
                     "y": 420,
                     "wires": [
                         [
                             "3f1f91ad.64efde"
                         ]
                     ]
                 },
                 {
                     "id": "6ddcc4e6.9e8dfc",
                     "type": "inject",
                     "z": "d31cee8e.b9b1a",
                     "name": "reset",
                     "props": [
                         {
                             "p": "reset",
                             "v": "true",
                             "vt": "bool"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "x": 660,
                     "y": 360,
                     "wires": [
                         [
                             "3f1f91ad.64efde"
                         ]
                     ]
                 }
              ]
              

              In diesem Fall muss man also bei neuen Geräten - den Flow nicht mehr ändern, da diese nun automatisch über die Wildcards überwachst werden.
              Das muss ich aber selbst alles noch implementieren. 😉

              Jedenfalls wenn sich ein Zustand ändert dann aktualisiert sich das Objekt automatisch sobald sich der Datenpunkt ändert.

              90a13a82-86ba-4632-aa51-84ff1da3d8ac-image.png

              Noch ein kleiner Nebeneffekt - die iobroker get und iobroker in Nodes - geben nicht die vollständigen Objektinformationen.

              Die iobroker - list Node aber schon!!!

              Damit ist es möglich auch auf die Aufzählungsfunktionen, wie Räume und Funktionen des Objektes zuzugreifen und ggf. zu filtern!!!!

              screen.png

              T 2 Replies Last reply Reply Quote 1
              • T
                Tontechniker @mickym last edited by

                @mickym
                Vielen Dank für Deine ausführlichen Antworten! Habe mir erst einmal die Logikmodule in Node Red istalliert und mache damit die ersten Versuche.
                Gruß
                Hans

                1 Reply Last reply Reply Quote 0
                • T
                  Tontechniker @mickym last edited by Tontechniker

                  @mickym
                  Ein Problem habe ich noch bei dem Logik-Modul "ODER". Nach einem Neustart des Systems müssen alle Eingänge (bei mir bis zu 14 "ORs") einmal geschaltet werden (true, false). Wenn das nicht geschieht, funktioniert das "OR" nicht richtig. Dafür gibt es vermutlich keine Lösung!?
                  Gruß
                  Hans

                  mickym 1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @Tontechniker last edited by mickym

                    @tontechniker Wie gesagt ich nutze die Logik-Nodes nicht und kenne sie auch nicht in der Anwendung.

                    Meine ODER Node funktioniert ja anhand von der Objekteigenschaften eines Objektes. Sprich es werden nur die Eigenschaften miteinander verknüpft.

                    Wenn Du es über die JOIN Node machst kannst über die Anzahl der benötigten Nachrichten steuern, dass erst 14 Nachrichten (verschiedener Topics) eingegangen sein müssen, bevor eine Nachricht geschickt wird.

                    Ansonsten kannst Du ja mittels der iobroker IN Nodes wenn Du KEINE Wildcards verwendest, am Anfang den IST Zustand senden.

                    7200e008-3e87-4c13-af94-ff7aedae3b31-image.png

                    Du kannst auch ein Objekt als JSON Speichern, dass Du zur Initialisierung wieder ausliest

                    .... UND .. UND ... UND.

                    Da musst selbst kreativ werden - und wie gesagt diese LOGIK-Nodes, die Du ja verwendest benutze ich nicht und kenne sie auch nicht.

                    @Hc-Yami hat sie Dir doch diese Logic-Nodes empfohlen, vielleicht kann er ja weiterhelfen.

                    T 1 Reply Last reply Reply Quote 1
                    • T
                      Tontechniker @mickym last edited by

                      @mickym
                      Danke! Das war der entscheidende Hinweis für mich als Anfänger!
                      Im Node "ioBroker in", "Fire by start: send message at start (only without wildcards in ID)" auswählen.
                      Gruß
                      Hans

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      898
                      Online

                      31.6k
                      Users

                      79.5k
                      Topics

                      1.3m
                      Posts

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