Ankündigung

Einklappen
Keine Ankündigung bisher.

KNX mit Node Red verbinden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    KNX mit Node Red verbinden

    Hallo Zusammen,

    aktuelle bastle ich an einem Müllkalender für den MDT Glastaster. Als Inspiration diente mit ein Video von Torben Ledermann. [https://www.youtube.com/watch?v=ixfO-ilJClU]

    Setup:

    Node-Red läuft über Synology Docker bzw. inzwischen Container Manager.
    KNX IP-Router SCN-IP100.03


    Zu meinem Problem: Ich bekomme kein Telegram auf KNX geschickt. Nach meinem Verständnis der Node-Red Aufbau bzw. die KNX Ultimate Umgebung korrekt aufgebaut sein. In die Gruppenadresse wird allerdings nichts geschrieben.



    image.png

    #2
    Die KNX-Verbindung von Nodered zum Router scheint ja zu stehen, sieht man an dem grünen Punkt unter den Nodes. Hast Du mal was einfaches probiert (Licht schalten) (nur timestamp auf KNX-Node)?

    Kommentar


      #3
      Zitat von Fredi009 Beitrag anzeigen
      In die Gruppenadresse wird allerdings nichts geschrieben.
      nix und neimand schreibt im KNX etwas in eine Gruppenadresse.
      Gruppenadressen sind das was als Inhalt in einem Telegramm auf den Bus geschrieben werden.

      Das erstmal zu den absoluten Grundlagen.

      Wie sieht denn die Defintion der GA 0/2/0 in der ETS aus?

      Meldung klingt nach binärem Signal. Das was Du da mit den Logiken bastelst schaut eher nach anderem Datenformat als boolesch true/false aus.


      Wie sehen denn die Parameter des KNX-Node aus?


      Ansonsten würde ich auch erstmal versuchen mit einer Lampen-Schalt GA simpel true/false aus einer injection zu schicken.
      ----------------------------------------------------------------------------------
      "Der Hauptgrund für Stress ist der tägliche Kontakt mit Idioten."
      Albert Einstein

      Kommentar


        #4
        Programmier einfach mal den MDT mit der Applikation durch (nicht partiell).
        Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

        Kommentar


          #5
          Was hast du denn als Datentyp in deine output node eingetragen? stimmt das mit dem Konfigurierten Typ der in der Node zugewiesenen Adresse zusammen?
          Das müsste für den Glastaster so konfiguriert sein:
          image.png
          Darf ich fragen, wie du das mit der Textlänge geplant hast? Der Glastaster erlaubt nur 14 Zeichen. Ein Durchrollen des Textes habe ich schon mal einem X1 gesehen, aber noch keine Möglichkeit in NodeRed.​

          Kommentar


            #6
            Zitat von Buhu91 Beitrag anzeigen
            noch keine Möglichkeit in NodeRed
            Im X1 gibts dafür ne fertige Logik
            Node Input Start/Stop -> Function srolling Text ->Delay ->Output)
            nimm den mal​:
            Code:
            [
                {
                    "id": "scrolling-text",
                    "type": "tab",
                    "label": "Scrolling Text",
                    "disabled": false,
                    "info": ""
                },
                {
                    "id": "inject-start",
                    "type": "inject",
                    "z": "scrolling-text",
                    "name": "Start Scrolling",
                    "props": [
                        {
                            "p": "payload"
                        }
                    ],
                    "repeat": "",
                    "crontab": "",
                    "once": false,
                    "onceDelay": "1",
                    "topic": "",
                    "payload": "start",
                    "payloadType": "str",
                    "x": 150,
                    "y": 80,
                    "wires": [
                        [
                            "start-scrolling"
                        ]
                    ]
                },
                {
                    "id": "inject-stop",
                    "type": "inject",
                    "z": "scrolling-text",
                    "name": "Stop Scrolling",
                    "props": [
                        {
                            "p": "payload"
                        }
                    ],
                    "repeat": "",
                    "crontab": "",
                    "once": false,
                    "onceDelay": "1",
                    "topic": "",
                    "payload": "stop",
                    "payloadType": "str",
                    "x": 150,
                    "y": 140,
                    "wires": [
                        [
                            "stop-scrolling"
                        ]
                    ]
                },
                {
                    "id": "start-scrolling",
                    "type": "function",
                    "z": "scrolling-text",
                    "name": "Start Scrolling Logic",
                    "func": "// Starte den Lauftext, indem ein Status-Flag gesetzt wird\nflow.set('scrollingActive', true);\n\n// Initiale Nachricht weiterleiten\nmsg.payload = flow.get('scrollingText') || \"Dies ist ein Beispieltext für Lauftext.\";\nreturn msg;",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 380,
                    "y": 80,
                    "wires": [
                        [
                            "scrolling-function"
                        ]
                    ]
                },
                {
                    "id": "stop-scrolling",
                    "type": "function",
                    "z": "scrolling-text",
                    "name": "Stop Scrolling Logic",
                    "func": "// Stoppe den Lauftext, indem das Status-Flag deaktiviert wird\nflow.set('scrollingActive', false);\nreturn null;",
                    "outputs": 0,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 380,
                    "y": 140,
                    "wires": []
                },
                {
                    "id": "scrolling-function",
                    "type": "function",
                    "z": "scrolling-text",
                    "name": "Scrolling Text",
                    "func": "// Prüfe, ob der Lauftext aktiv ist\nif (!flow.get('scrollingActive')) {\n    return null; // Abbrechen, wenn der Lauftext deaktiviert ist\n}\n\nconst text = flow.get('scrollingText') || \"Dies ist ein Beispieltext für Lauftext.\"; // Eingabetext\nconst maxBytes = 14; // Maximale Länge eines Segments\n\n// Aktuellen Index aus dem Flow-Kontext laden\nlet currentIndex = flow.get('currentIndex') || 0;\n\n// Text erweitern, damit er als Lauftext durchläuft\nconst paddedText = text.padEnd(text.length + maxBytes, ' ');\n\n// Lauftext-Segment erstellen\nconst segment = paddedText.substring(currentIndex, currentIndex + maxBytes);\n\n// Index für den nächsten Durchlauf erhöhen\ncurrentIndex = (currentIndex + 1) % paddedText.length;\nflow.set('currentIndex', currentIndex);\n\n// Ausgabe vorbereiten\nmsg.payload = segment;\nreturn msg;",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 380,
                    "y": 200,
                    "wires": [
                        [
                            "debug-node",
                            "delay-node"
                        ]
                    ]
                },
                {
                    "id": "delay-node",
                    "type": "delay",
                    "z": "scrolling-text",
                    "name": "Delay",
                    "pauseType": "delay",
                    "timeout": "500",
                    "timeoutUnits": "milliseconds",
                    "rate": "1",
                    "nbRateUnits": "second",
                    "rateUnits": "second",
                    "randomFirst": "1",
                    "randomLast": "5",
                    "randomUnits": "seconds",
                    "drop": false,
                    "x": 560,
                    "y": 200,
                    "wires": [
                        [
                            "scrolling-function"
                        ]
                    ]
                },
                {
                    "id": "debug-node",
                    "type": "debug",
                    "z": "scrolling-text",
                    "name": "Scrolling Output",
                    "active": true,
                    "tosidebar": true,
                    "console": false,
                    "tostatus": false,
                    "complete": "payload",
                    "targetType": "msg",
                    "statusVal": "",
                    "statusType": "auto",
                    "x": 560,
                    "y": 260,
                    "wires": []
                }
            ]​
            Musst noch den Text im Start Scrolling Logic-Node oder im Flow-Kontext (flow.set('scrollingText')) anpassen. Die Geschwindigkeit kannste im Delay Node ändern.

            Gruss
            Guido
            Zuletzt geändert von PhilW; 11.01.2025, 08:37.
            Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

            Kommentar

            Lädt...
            X