Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Debug Messages

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Debug Messages

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

      Hallo,

      wie kann man in einem Flow die Ausgangswerte aller Nodes nach einer Aktion ansehen?

      Ich sehe immer nur den Wert am Debug-Node.

      1 Reply Last reply Reply Quote 0
      • R
        rewenode last edited by

        Kannst du näher erklären (vlt. ein Beispiel-flow) was du sehen willst?

        Eigentlich ist der debug-node dafür zuständig.

        In einem function-node gibt es weitere Möglichkeiten, wie node.status, node.log, node.warn, node.error

        1 Reply Last reply Reply Quote 0
        • G
          Garf last edited by

          Ich hänge mich mit meiner Frage mal mit in diesen Thread. Die Überschrift jedenfalls passt schon mal.

          Wie kann ich mir die Werteänderung in einer Schleife ausgeben lassen.

          Im Moment erstelle ich auf dieser Plattform https://js.do/ meine Programme. Vorteil, ich kann mir am Bildschirm sofort das Ergebnis ansehen und über die docment.write () Methode die Zwischenwerte anzeigen lassen.
          3639_sc1.jpg
          Jetzt frage ich mich schon seit Tagen, wie man so etwas in Node Red und dem Debug Node hinbekommt.

          Alle Eigenversuche sind kläglich gescheitert. Eine Möglichkeit beschreibt Steve in einem seiner unzählgen Tutorials (http://www.steves-internet-guide.com/no … functions/).

          3639_sc3.jpg

          3639_sc2.jpg

          Beispiel-Flow:

          ! ````
          [{"id":"3d5127fd.3db03","type":"function","z":"2b7b8fd1.2a4c68","name":"","func":"var m_out=[]; //rray for message objects\nvar message=0;\nfor (i=0;i<5;i++){\n message=message+i; //add count to message\n var newmsg={payload:message, i}\n m_out.push(newmsg);\n}\nreturn[m_out];\n","outputs":1,"noerr":0,"x":360,"y":1000,"wires":[["dab0af1f.5344c8"]]},{"id":"59f7ba79.67264c","type":"inject","z":"2b7b8fd1.2a4c68","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":1000,"wires":[["3d5127fd.3db03"]]},{"id":"dab0af1f.5344c8","type":"debug","z":"2b7b8fd1.2a4c68","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":510,"y":1000,"wires":[]}]

          
          Die Möglichkeit funktioniert zwar, ist aber in der Handhabung nicht gerade eine schlanke Lösung. Und was es mit dem node.send () so auf sich hat erschließt sich mir auch nicht so wirklich. Was sendet diese Möglichkeit wann wohin. Das User Guide von nodered.org [https://nodered.org/docs/writing-functions](https://nodered.org/docs/writing-functions) ist ja nicht schlecht, nur manchmal wäre so ein kleines Beispiel schon sehr hilfreich.
          
          Ich hoffe ihr (insbesondere rewenode) versteht mein Anliegen und habt eine Lösung für mich. :mrgreen:
          1 Reply Last reply Reply Quote 0
          • R
            rewenode last edited by

            Ich hoffe, ich hab dich richtig verstanden.

            Also, beim Debugging muss man unterscheiden, zwischen:

            1. dem einfachen Ausgeben der Message(s) zwischen nodes

            Variante 1:

            An der gewünschten Stelle einen Debug-Node hängen:
            3999_debug_1.png
            Vorteil:

            Man kann den debug-nodes eigene Namen geben und/oder neuerdings den node-status aktivieren und erhöht so die Übersichtlichkeit im Debug-Panel

            Nachteil:

            Man benötigt pro debug-msg einen debug-node. Da kann der flow schnell absaufen.

            Variante 2:

            Man macht sich die Tatsache zu Nutze, dann innerhalb eines Flows NIEMALS Messages GLEICHZEITIG eintreffen können.

            Daraus folgt, das man eigentlich nur einen debug-node braucht, an den man alle zu debuggenden Ausgänge pappen kann.
            3999_debug_2.png

            Vorteil:

            Man braucht nur einen debug-node.

            Nachteil:

            Man kann im Debug-Panel nicht mehr ohne Weiteres sehen, wo der debug-wert herkommt.

            2. dem Debugger innerhalb eines Function-nodes (das meinst du wohl)

            Dein mitgeliefertes Beispiel ist dazu eher nicht geeignet, weil es darin eher darum geht, wie man aus einem Functions-node mehrere MSG's nacheinander über EINEN Ausgang senden kann.

            Zum Debuggen sind eher node.send, node.log, node.warn, node.error interessant.

            node.send

            Eigentlich nicht unbedingt fürs debugging gedacht, läßt es sich aber gut dafür nutzen.

            Damit kann innerhalb eines function-nodes an jeder Stelle eine Nachricht an den Ausgang gesendet werden.

            Aber Achtung! Das ist dann eine ganz normale Nachricht. Man muss daran denken, wie evtl. nachfolgende Nodes darauf reagieren.

            Wenn ich sowas einsetze, pack ich die auszugebende debug-Nachricht in ein eigenes debug-property.

            node.log

            Die eigentlich vorgesehene Logging-Möglichkeit. Allerdings muss hier das Logging-Ziel in der settings.js konfiguriert werden.

            siehe https://nodered.org/docs/user-guide/logging

            node.warn / node.error

            Damit kann man aus einem Functions-node eine AUSGABE direkt ans debug-panel schicken OHNE das eine normale Message am Ausgang erzeugt wird.

            Das ist eigentlich ideal um mal eben eine debugg-ausgabe zu erzeugen.

            Na und dann besteht natürlich die Supermöglichkeit, mit node.status eine Ausgabe direkt unter das Function-node zu erstellen. Für Loops allerdings nicht besonders geeignet.

            Apropos Loop

            Loops im Function-Node können sehr gefährlich sein. Das Function-node läuft in einer Sandbox als ein Tread. Will sagen, solange dein Loop läuft steht der restliche Flow.

            Da ist es häufig sinnvoller, den Loop mit mehreren nodes aufzubauen. Da gibt es mehrere Verfahren. Aber das ist ein anderes Thema

            Beispielflow der verschiedenen Degug-Varianten im function-loop:

            ! ````
            [
            {
            "id": "ef40cde8.11b9c8",
            "type": "function",
            "z": "17cf8153.2cd2b7",
            "name": "output debug messages for loop",
            "func": "let p = 0;\nfor (i=0;i<5;i++){\n p += 1; //only increment payload\n \n // method 1\n // simple but effective for debugging\n node.send({payload: {"actual": p,\n " i": i}});\n \n // method 2\n // standard logging\n // must be configure in settings.js\n node.log("log - actual: "+p+ " i: "+ i);\n\n // method 3 normally reserved for warnings\n // outpot in debug panel\n node.warn("warn - actual: "+p+ " i: "+ i);\n\n // method 4\n // normally reserved for errors\n node.error("error - actual: "+p+ " i: "+ i);\n\n \n}\n\nmsg.payload = p;\nreturn msg;\n",
            "outputs": 1,
            "noerr": 0,
            "x": 580,
            "y": 480,
            "wires": [
            [
            "529c808c.0440c"
            ]
            ]
            },
            {
            "id": "b8cd2edd.b104b",
            "type": "inject",
            "z": "17cf8153.2cd2b7",
            "name": "Input_payload = 0",
            "topic": "",
            "payload": "0",
            "payloadType": "num",
            "repeat": "",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "x": 300,
            "y": 480,
            "wires": [
            [
            "ef40cde8.11b9c8"
            ]
            ]
            },
            {
            "id": "529c808c.0440c",
            "type": "debug",
            "z": "17cf8153.2cd2b7",
            "name": "debug(i) and output = 5",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": true,
            "complete": "payload",
            "x": 890,
            "y": 480,
            "wires": []
            }
            ]

            1 Reply Last reply Reply Quote 0
            • G
              Garf last edited by

              Was soll ich sagen, Du hast alles richtig verstanden und den Nagel im Zentrum auf den Kopf getroffen. :lol:

              Wieder etwas zum besseren Verständnis im Umgang mit Node Red dazu gelernt. Genau solche Beispiele brauche ich zum Lernen. Im Netz und auch auf Youtube konnte ich dazu nicht wirklich etwas finden. In die richtige Richtung habe ich schon geschielt und mit meiner Einschätzung dass es doch auch einfacher gehen muss lag ich ja nicht ganz verkehrt.

              Das Loggen brauche ich als Hobbyprogrammierer nur zur Fehlersuche und zum Testen.

              Ohne deine Hilfe hätte ich sicher noch lange im Netz gesucht.

              Vielen Dank dafür.

              1 Reply Last reply Reply Quote 0
              • R
                rewenode last edited by

                Nicht dafür

                1 Reply Last reply Reply Quote 0
                • G
                  Garf last edited by

                  @rewenode:

                  Nicht dafür `
                  Sehe ich aber ganz anders. 😉

                  Heute schon in Anwendung gebracht. Funktioniert 1A. Damit hast Du mir eine große Freude gemacht. Für mich ist heute schon Weihnachten.

                  Nochmals vielen Dank und schon einmal schöne Weihnachtstage.

                  Gruß Garf

                  1 Reply Last reply Reply Quote 0
                  • R
                    rewenode last edited by

                    Ach und was ich inzwischen weis, mit VSCode kann man sogar den Code innerhalb von function-nodes direkt debuggen. Mit Breakpoints und allem drum und dran.

                    Ich nutz das, für mein erstes (im Entstehen begriffenes) eigenes Node. Das teste ich quasi erstmal als Code im function-node. Und da ist ein echter Debugger schon klasse.

                    Das klappt auch dann, wenn node-red als Docker-Container ausgeführt wird.

                    VSCode entwickelt sich immer mehr zum Schweizer Taschenmesser für alle möglichen Sprachen.

                    1 Reply Last reply Reply Quote 0
                    • G
                      Garf last edited by

                      @rewenode:

                      Ich nutz das, für mein erstes (im Entstehen begriffenes) eigenes Node. Das teste ich quasi erstmal als Code im function-node. Und da ist ein echter Debugger schon klasse. ` Da machst Du mich schon wieder neugierig. Halt uns bitte da mal auf dem Laufenden.

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      853
                      Online

                      31.8k
                      Users

                      79.9k
                      Topics

                      1.3m
                      Posts

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