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. [gelöst] Output eines externen Modules in msg.payload

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

[gelöst] Output eines externen Modules in msg.payload

Geplant Angeheftet Gesperrt Verschoben Node-Red
15 Beiträge 2 Kommentatoren 1.1k Aufrufe 2 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.
  • S Steff75

    Momentan benutze ich youtube-dl noch als Python-Modul, welches ich über einen Exec-Node aufrufe. Das funktioniert auch.

    Nun gibt es aber auch für JavaScript bei npm das youtube-dl-exec Modul, welches ich stattdessen gerne benutzen würde. Die Installation ist schon geschehen und das Einbinden in einen Funktion-Node klappt auch.

    Nur stehe ich gerade auf dem Schlauch, wie ich den Output in eine msg.payload bekomme. Alles was mir gelingt, ist den Output mittels node.send im Debug-Fenster darzustellen. Aber diese Daten kann ich so ja nicht im Flow weiterverabeiten. Zumindest ist mein Erfahrungslevel nicht auf dem Stand, es hinzubekommen. Könnte mir jemand bitte einen Tipp dazu geben? Danke!

    Screenshot 2022-01-15 110041.png

    Screenshot 2022-01-15 110326.png
    Screenshot 2022-01-15 110348.png

    [{"id":"f5a791ab593792aa","type":"function","z":"a5739ccf.91045","name":"youtube-dl-exec","func":"youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => node.send(output));","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"youtubeDlExec","module":"youtube-dl-exec"}],"x":340,"y":200,"wires":[["1202dfee1cb84604"]]},{"id":"75e224aee8b98c7f","type":"inject","z":"a5739ccf.91045","name":"BkJRS9Z-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJRS9Z-tgY","payloadType":"str","x":140,"y":200,"wires":[["f5a791ab593792aa"]]},{"id":"1202dfee1cb84604","type":"debug","z":"a5739ccf.91045","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":530,"y":200,"wires":[]}]
    
    mickymM Offline
    mickymM Offline
    mickym
    Most Active
    schrieb am zuletzt editiert von
    #2

    @steff75 Na wenn Du es in eine Debug Node bekommst, dann hast Du doch ein Nachrichtenobjekt. Poste halt mal das komplette Nachrichtenobjekt aus dem Debugfenster.

    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.

    S 1 Antwort Letzte Antwort
    0
    • mickymM mickym

      @steff75 Na wenn Du es in eine Debug Node bekommst, dann hast Du doch ein Nachrichtenobjekt. Poste halt mal das komplette Nachrichtenobjekt aus dem Debugfenster.

      S Offline
      S Offline
      Steff75
      schrieb am zuletzt editiert von
      #3

      @mickym Danke für die Rückmeldung. Der Output ist leider nicht vom Debug-Node. Der kommt vom Function-Node von der node.send() Funktion (sh. Screenshot). Ich habe nur keine Ahnung, wie ich das in ein Nachrichtenobjekt rein bekomme.

      mickymM 1 Antwort Letzte Antwort
      0
      • S Steff75

        @mickym Danke für die Rückmeldung. Der Output ist leider nicht vom Debug-Node. Der kommt vom Function-Node von der node.send() Funktion (sh. Screenshot). Ich habe nur keine Ahnung, wie ich das in ein Nachrichtenobjekt rein bekomme.

        mickymM Offline
        mickymM Offline
        mickym
        Most Active
        schrieb am zuletzt editiert von
        #4

        @steff75 Na ich habs gerade ausprobiert - da kommen doch super viele INformationen, die Du weiter verarbeiten kannst:

        76ca59b2-4b48-477f-ab82-379dba9b2372-image.png

        Du brauchst Dir doch nur aussuchen, was Du in Deiner payload haben willst oder nimmst halt das ganze Objekt in Deine Payload aber das macht doch keinen Sinn.

        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.

        S 1 Antwort Letzte Antwort
        0
        • mickymM mickym

          @steff75 Na ich habs gerade ausprobiert - da kommen doch super viele INformationen, die Du weiter verarbeiten kannst:

          76ca59b2-4b48-477f-ab82-379dba9b2372-image.png

          Du brauchst Dir doch nur aussuchen, was Du in Deiner payload haben willst oder nimmst halt das ganze Objekt in Deine Payload aber das macht doch keinen Sinn.

          S Offline
          S Offline
          Steff75
          schrieb am zuletzt editiert von
          #5

          @mickym Ja, aber genau da steh ich ja auf'm Schlauch. Wie bekomme ich die Daten in die msg.payload rein. Mit einem Change Node hat's bei mir nicht funktioniert. Bin gerade mit dem Handy unterwegs, kann deshalb gerade nichts testen.

          mickymM 1 Antwort Letzte Antwort
          0
          • S Steff75

            @mickym Ja, aber genau da steh ich ja auf'm Schlauch. Wie bekomme ich die Daten in die msg.payload rein. Mit einem Change Node hat's bei mir nicht funktioniert. Bin gerade mit dem Handy unterwegs, kann deshalb gerade nichts testen.

            mickymM Offline
            mickymM Offline
            mickym
            Most Active
            schrieb am zuletzt editiert von mickym
            #6

            @steff75 Also meines Erachtens macht es keinen Sinn, das gesamte Objekt in eine Payload zu übertragen, sondern nur einzelne Teile. Habe es Dir aber in allen Variationen gemacht und auch mal das ganze Objekt in eine payload gepackt-

            8c85de0b-8f67-46e4-8bfb-f6183699cb60-image.png

            [{"id":"f5a791ab593792aa","type":"function","z":"9fcb0a617a8859ec","name":"youtube-dl-exec","func":"youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => node.send(output));","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"youtubeDlExec","module":"youtube-dl-exec"}],"x":400,"y":260,"wires":[["1202dfee1cb84604","0f8f4167b7967ab8","52da2783f79bf177"]]},{"id":"75e224aee8b98c7f","type":"inject","z":"9fcb0a617a8859ec","name":"BkJRS9Z-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJRS9Z-tgY","payloadType":"str","x":200,"y":260,"wires":[["f5a791ab593792aa"]]},{"id":"1202dfee1cb84604","type":"debug","z":"9fcb0a617a8859ec","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":260,"wires":[]},{"id":"0f8f4167b7967ab8","type":"change","z":"9fcb0a617a8859ec","name":"Views","rules":[{"t":"set","p":"payload","pt":"msg","to":"view_count","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":340,"wires":[["a5672b26088ab4b3"]]},{"id":"a5672b26088ab4b3","type":"debug","z":"9fcb0a617a8859ec","name":"direkter Zugriff (empfohlen)","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":810,"y":340,"wires":[]},{"id":"52da2783f79bf177","type":"change","z":"9fcb0a617a8859ec","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"$","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":400,"wires":[["d38033480368b3ca","6c18dcd99f1063ed"]]},{"id":"d38033480368b3ca","type":"debug","z":"9fcb0a617a8859ec","name":"ganzes Objekt in payload","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":810,"y":400,"wires":[]},{"id":"6c18dcd99f1063ed","type":"change","z":"9fcb0a617a8859ec","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.view_count","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":460,"wires":[["ee414a30cdf37df0"]]},{"id":"ee414a30cdf37df0","type":"debug","z":"9fcb0a617a8859ec","name":"view_count aus payload","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1030,"y":460,"wires":[]}]
            

            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.

            S 1 Antwort Letzte Antwort
            1
            • mickymM mickym

              @steff75 Also meines Erachtens macht es keinen Sinn, das gesamte Objekt in eine Payload zu übertragen, sondern nur einzelne Teile. Habe es Dir aber in allen Variationen gemacht und auch mal das ganze Objekt in eine payload gepackt-

              8c85de0b-8f67-46e4-8bfb-f6183699cb60-image.png

              [{"id":"f5a791ab593792aa","type":"function","z":"9fcb0a617a8859ec","name":"youtube-dl-exec","func":"youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => node.send(output));","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"youtubeDlExec","module":"youtube-dl-exec"}],"x":400,"y":260,"wires":[["1202dfee1cb84604","0f8f4167b7967ab8","52da2783f79bf177"]]},{"id":"75e224aee8b98c7f","type":"inject","z":"9fcb0a617a8859ec","name":"BkJRS9Z-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJRS9Z-tgY","payloadType":"str","x":200,"y":260,"wires":[["f5a791ab593792aa"]]},{"id":"1202dfee1cb84604","type":"debug","z":"9fcb0a617a8859ec","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":260,"wires":[]},{"id":"0f8f4167b7967ab8","type":"change","z":"9fcb0a617a8859ec","name":"Views","rules":[{"t":"set","p":"payload","pt":"msg","to":"view_count","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":340,"wires":[["a5672b26088ab4b3"]]},{"id":"a5672b26088ab4b3","type":"debug","z":"9fcb0a617a8859ec","name":"direkter Zugriff (empfohlen)","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":810,"y":340,"wires":[]},{"id":"52da2783f79bf177","type":"change","z":"9fcb0a617a8859ec","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"$","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":400,"wires":[["d38033480368b3ca","6c18dcd99f1063ed"]]},{"id":"d38033480368b3ca","type":"debug","z":"9fcb0a617a8859ec","name":"ganzes Objekt in payload","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":810,"y":400,"wires":[]},{"id":"6c18dcd99f1063ed","type":"change","z":"9fcb0a617a8859ec","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.view_count","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":460,"wires":[["ee414a30cdf37df0"]]},{"id":"ee414a30cdf37df0","type":"debug","z":"9fcb0a617a8859ec","name":"view_count aus payload","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1030,"y":460,"wires":[]}]
              

              S Offline
              S Offline
              Steff75
              schrieb am zuletzt editiert von
              #7

              @mickym Super, danke. Ich werde es nachher mal ausprobieren.

              mickymM 1 Antwort Letzte Antwort
              0
              • S Steff75

                @mickym Super, danke. Ich werde es nachher mal ausprobieren.

                mickymM Offline
                mickymM Offline
                mickym
                Most Active
                schrieb am zuletzt editiert von mickym
                #8

                @steff75 Alternativ kannst Du auch die function Node modifizieren, so dass das Objekt in eine payload geschrieben wird.
                Aber wie gesagt, man kann auch mit dem Objekt arbeiten und dort die Werte ermitteln und braucht es deshalb nicht.

                915a337a-06ae-431c-8e64-e9c4dffbfdfc-image.png

                youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {
                    var newMsg = {payload:output};
                    node.send(newMsg);
                    });
                

                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.

                S 1 Antwort Letzte Antwort
                1
                • mickymM mickym

                  @steff75 Alternativ kannst Du auch die function Node modifizieren, so dass das Objekt in eine payload geschrieben wird.
                  Aber wie gesagt, man kann auch mit dem Objekt arbeiten und dort die Werte ermitteln und braucht es deshalb nicht.

                  915a337a-06ae-431c-8e64-e9c4dffbfdfc-image.png

                  youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {
                      var newMsg = {payload:output};
                      node.send(newMsg);
                      });
                  
                  S Offline
                  S Offline
                  Steff75
                  schrieb am zuletzt editiert von
                  #9

                  @mickym sagte in Output eines externen Modules in msg.payload:

                                                                                                                                              youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {                                                                                                                                                                                var newMsg = {payload:output};                                                                                                                                                                                node.send(newMsg);                                                                                                                                                                                });                                            
                  

                  Ok, das in deiner zweiten Lösung ist das, was ich eigentlich die ganze Zeit versucht hatte und nicht hinbekommen habe. Das nehme ich als Basis und hole mir von da die benötigten Daten raus.

                  Warum das bei mir mit dem Change-Node damals nicht funktioniert hatte, kann ich jetzt gar nicht mehr nachvollziehen. Evt. ein Buchstabenverdreher, weil ich ja normalerweise schon mit dem Change-Node zurecht komme. Egal, dank deiner Hilfe funktioniert es ja nun.

                  Vielen Dank nochmal! :+1:

                  mickymM 1 Antwort Letzte Antwort
                  0
                  • S Steff75

                    @mickym sagte in Output eines externen Modules in msg.payload:

                                                                                                                                                youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {                                                                                                                                                                                var newMsg = {payload:output};                                                                                                                                                                                node.send(newMsg);                                                                                                                                                                                });                                            
                    

                    Ok, das in deiner zweiten Lösung ist das, was ich eigentlich die ganze Zeit versucht hatte und nicht hinbekommen habe. Das nehme ich als Basis und hole mir von da die benötigten Daten raus.

                    Warum das bei mir mit dem Change-Node damals nicht funktioniert hatte, kann ich jetzt gar nicht mehr nachvollziehen. Evt. ein Buchstabenverdreher, weil ich ja normalerweise schon mit dem Change-Node zurecht komme. Egal, dank deiner Hilfe funktioniert es ja nun.

                    Vielen Dank nochmal! :+1:

                    mickymM Offline
                    mickymM Offline
                    mickym
                    Most Active
                    schrieb am zuletzt editiert von
                    #10

                    @steff75
                    Man kann auch das existierende Nachrichtenobjekt nutzen. Habs gerade probiert.

                    youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {msg.payload = output;node.send(msg);});
                    

                    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.

                    S 1 Antwort Letzte Antwort
                    1
                    • mickymM mickym

                      @steff75
                      Man kann auch das existierende Nachrichtenobjekt nutzen. Habs gerade probiert.

                      youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {msg.payload = output;node.send(msg);});
                      
                      S Offline
                      S Offline
                      Steff75
                      schrieb am zuletzt editiert von
                      #11

                      @mickym Das werde ich morgen mal testen. Danke 👍

                      Noch was. Als ich vorhin das andere probiert hatte, habe ich auch mal eine absichtlich nicht existierende Youtube Video-Url verwendet, um zu sehen, ob dann auch ein Output kommt. Momentan passiert bei so einer Url dann einfach nix. Kann ich da noch was einbauen, dass mir in so einem Fall im Output eine Fehlermeldung ausgegeben wird? Dann könnte ich im weiteren Flowverlauf darauf reagieren.

                      mickymM 3 Antworten Letzte Antwort
                      0
                      • S Steff75

                        @mickym Das werde ich morgen mal testen. Danke 👍

                        Noch was. Als ich vorhin das andere probiert hatte, habe ich auch mal eine absichtlich nicht existierende Youtube Video-Url verwendet, um zu sehen, ob dann auch ein Output kommt. Momentan passiert bei so einer Url dann einfach nix. Kann ich da noch was einbauen, dass mir in so einem Fall im Output eine Fehlermeldung ausgegeben wird? Dann könnte ich im weiteren Flowverlauf darauf reagieren.

                        mickymM Offline
                        mickymM Offline
                        mickym
                        Most Active
                        schrieb am zuletzt editiert von mickym
                        #12

                        @steff75 sagte in Output eines externen Modules in msg.payload:

                        @mickym Das werde ich morgen mal testen. Danke 👍

                        Noch was. Als ich vorhin das andere probiert hatte, habe ich auch mal eine absichtlich nicht existierende Youtube Video-Url verwendet, um zu sehen, ob dann auch ein Output kommt. Momentan passiert bei so einer Url dann einfach nix. Kann ich da noch was einbauen, dass mir in so einem Fall im Output eine Fehlermeldung ausgegeben wird? Dann könnte ich im weiteren Flowverlauf darauf reagieren.

                        Ich hab mir zwar mal die API von dem Teil angeschaut - aber diese Warnings funktionieren nicht - man bekommt auch nichts, wenn man noWarnungs auf false stellt.

                        001c36e8-1c9f-4948-a6fd-605dcc3220f5-image.png

                        Die einzige Möglichkeit die ich sehe ist einen TimeOut Timer in Deiner Function Node zu setzen, der einen Fehler erzeugt:

                        const myTimeout = setTimeout(() => node.error("Error: Keine Antwort",msg), 5000);
                        
                        youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {
                                msg.payload = output;
                                clearTimeout(myTimeout);
                                node.send(msg);
                                node.done();
                            });
                        
                        

                        Ich hab den mal auf 5 s gesetzt.

                        die 1. Node ergibt das Objekt:

                        ed749911-de7e-4f9c-ac83-cb15e2b9533c-image.png

                        die 2. Node erzeugt nun einen Fehler:

                        ea60a8b2-1644-4efb-992d-a724f2ae1fbc-image.png

                        Nachricht geht nicht! EDIT: Doch geht schon - habe wieder die Asynchronität vergessen. Mit node.send() gehts aber - siehe nächstes Posting.

                        Den Fehler kann man aber mit einer Catch Node abfangen, dann gibts keinen Fehler mehr, sondern Du kannst den Flow weiterbearbeiten und das Error-Objekt auswerten:

                        b1594b4a-f65e-4def-bf83-86894d3ee590-image.png

                        [{"id":"f5a791ab593792aa","type":"function","z":"cb05e14b.326a9","name":"youtube-dl-exec","func":"const myTimeout = setTimeout(() => node.error(\"Error: Keine Antwort\",msg), 5000);\n\nyoutubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {\n        msg.payload = output;\n        clearTimeout(myTimeout);\n        node.send(msg);\n        node.done();\n    });\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"youtubeDlExec","module":"youtube-dl-exec"}],"x":620,"y":1260,"wires":[["1202dfee1cb84604"]]},{"id":"75e224aee8b98c7f","type":"inject","z":"cb05e14b.326a9","name":"BkJRS9Z-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJRS9Z-tgY","payloadType":"str","x":430,"y":1240,"wires":[["f5a791ab593792aa"]]},{"id":"1202dfee1cb84604","type":"debug","z":"cb05e14b.326a9","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":830,"y":1260,"wires":[]},{"id":"29008fa6b5e17efb","type":"inject","z":"cb05e14b.326a9","name":"Error URL: BkJRS-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJRS-tgY","payloadType":"str","x":400,"y":1280,"wires":[["f5a791ab593792aa"]]},{"id":"84d1592163f9765b","type":"catch","z":"cb05e14b.326a9","name":"","scope":["f5a791ab593792aa"],"uncaught":false,"x":560,"y":1360,"wires":[["6d23f7d365575c5e"]]},{"id":"6d23f7d365575c5e","type":"debug","z":"cb05e14b.326a9","name":"Fehlerhafte URL","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":1360,"wires":[]}]
                        

                        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
                        • S Steff75

                          @mickym Das werde ich morgen mal testen. Danke 👍

                          Noch was. Als ich vorhin das andere probiert hatte, habe ich auch mal eine absichtlich nicht existierende Youtube Video-Url verwendet, um zu sehen, ob dann auch ein Output kommt. Momentan passiert bei so einer Url dann einfach nix. Kann ich da noch was einbauen, dass mir in so einem Fall im Output eine Fehlermeldung ausgegeben wird? Dann könnte ich im weiteren Flowverlauf darauf reagieren.

                          mickymM Offline
                          mickymM Offline
                          mickym
                          Most Active
                          schrieb am zuletzt editiert von mickym
                          #13

                          @steff75 So manchmal bin ich einfach blöd, das Problem warum im Fehlerfall vorher keine normale Nachricht versendet wurde, liegt an der Asynchronität.

                          Also, wenn man einfach eine Meldung im Fehlerfall ausgeben will, dann kann man das auch wie folgt machen:

                          const myTimeout = setTimeout(NoReturn, 5000);
                          
                          youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {
                              msg.payload = output;
                              clearTimeout(myTimeout);
                              node.send(msg);
                              node.done();
                           });
                          
                          function NoReturn(){
                              msg.payload = "Keine Rückantwort";
                              node.send(msg);
                              node.done();
                          }
                          
                          

                          2cb370bc-9ef1-4501-9900-e58b7e4f327e-image.png

                          [{"id":"6452b757c45baa7c","type":"function","z":"84ce2b17a7e60da8","name":"youtube-dl-exec","func":"const myTimeout = setTimeout(NoReturn, 5000);\n\nyoutubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {\n msg.payload = output;\n clearTimeout(myTimeout);\n node.send(msg);\n node.done();\n });\n\nfunction NoReturn(){\n msg.payload = \"Keine Rückantwort\";\n node.send(msg);\n node.done();\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"youtubeDlExec","module":"youtube-dl-exec"}],"x":660,"y":680,"wires":[["68d5040203c27b4d"]]},{"id":"6c856e483f45a597","type":"inject","z":"84ce2b17a7e60da8","name":"BkJRS9Z-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJRS9Z-tgY","payloadType":"str","x":470,"y":660,"wires":[["6452b757c45baa7c"]]},{"id":"68d5040203c27b4d","type":"debug","z":"84ce2b17a7e60da8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":870,"y":680,"wires":[]},{"id":"11b80ade27c10608","type":"inject","z":"84ce2b17a7e60da8","name":"Error URL: BkJRS-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJRS-tgY","payloadType":"str","x":440,"y":700,"wires":[["6452b757c45baa7c"]]}]
                          

                          Man kann auch die alte payload in die Rückmeldung einbeziehen:

                          function NoReturn(){
                              msg.payload = "Keine Rückantwort von" + msg.payload;
                              node.send(msg);
                              node.done();
                          }
                          

                          a7415458-ad47-47ec-a941-4f6a5ff4c9c9-image.png

                          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.

                          S 1 Antwort Letzte Antwort
                          1
                          • S Steff75

                            @mickym Das werde ich morgen mal testen. Danke 👍

                            Noch was. Als ich vorhin das andere probiert hatte, habe ich auch mal eine absichtlich nicht existierende Youtube Video-Url verwendet, um zu sehen, ob dann auch ein Output kommt. Momentan passiert bei so einer Url dann einfach nix. Kann ich da noch was einbauen, dass mir in so einem Fall im Output eine Fehlermeldung ausgegeben wird? Dann könnte ich im weiteren Flowverlauf darauf reagieren.

                            mickymM Offline
                            mickymM Offline
                            mickym
                            Most Active
                            schrieb am zuletzt editiert von
                            #14

                            @steff75
                            Da ich eigentlich keine Freund von Function Nodes bin, das Ganze auch mal als reinen Flow mit der ursprünglichen Function Node realisiert.

                            6d11c364-af60-49e4-8ecc-24a6f45b0065-image.png

                            [{"id":"f5a791ab593792aa","type":"function","z":"fc80e101f528680b","name":"youtube-dl-exec","func":"youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => { var newMsg = {payload:output}; node.send(newMsg); });","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"youtubeDlExec","module":"youtube-dl-exec"}],"x":660,"y":300,"wires":[["5be3e24da46c8976","9b7a107317314c41"]]},{"id":"5be3e24da46c8976","type":"debug","z":"fc80e101f528680b","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":930,"y":300,"wires":[]},{"id":"5f4d16b8fe1a7254","type":"trigger","z":"fc80e101f528680b","name":"Timeout nach 5s","op1":"","op2":"Keine Rückmeldung","op1type":"nul","op2type":"str","duration":"5","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":680,"y":420,"wires":[["f9925be5d5cde4eb"]]},{"id":"9b7a107317314c41","type":"change","z":"fc80e101f528680b","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":680,"y":360,"wires":[["5f4d16b8fe1a7254"]]},{"id":"f9925be5d5cde4eb","type":"debug","z":"fc80e101f528680b","name":"Fehlerbehandlung","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":950,"y":420,"wires":[]},{"id":"877305d6a938a5c3","type":"inject","z":"fc80e101f528680b","name":"BkJRS9Z-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJRS9Z-tgY","payloadType":"str","x":230,"y":340,"wires":[["e0188791c1247d42"]]},{"id":"56903b042b7df479","type":"inject","z":"fc80e101f528680b","name":"Error BkJR-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJR-tgY","payloadType":"str","x":220,"y":400,"wires":[["e0188791c1247d42"]]},{"id":"e0188791c1247d42","type":"function","z":"fc80e101f528680b","name":"Input","func":"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":360,"wires":[["f5a791ab593792aa","5f4d16b8fe1a7254"]]}]
                            

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

                              @steff75 So manchmal bin ich einfach blöd, das Problem warum im Fehlerfall vorher keine normale Nachricht versendet wurde, liegt an der Asynchronität.

                              Also, wenn man einfach eine Meldung im Fehlerfall ausgeben will, dann kann man das auch wie folgt machen:

                              const myTimeout = setTimeout(NoReturn, 5000);
                              
                              youtubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {
                                  msg.payload = output;
                                  clearTimeout(myTimeout);
                                  node.send(msg);
                                  node.done();
                               });
                              
                              function NoReturn(){
                                  msg.payload = "Keine Rückantwort";
                                  node.send(msg);
                                  node.done();
                              }
                              
                              

                              2cb370bc-9ef1-4501-9900-e58b7e4f327e-image.png

                              [{"id":"6452b757c45baa7c","type":"function","z":"84ce2b17a7e60da8","name":"youtube-dl-exec","func":"const myTimeout = setTimeout(NoReturn, 5000);\n\nyoutubeDlExec(msg.payload, { dumpSingleJson: true }).then(output => {\n msg.payload = output;\n clearTimeout(myTimeout);\n node.send(msg);\n node.done();\n });\n\nfunction NoReturn(){\n msg.payload = \"Keine Rückantwort\";\n node.send(msg);\n node.done();\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"youtubeDlExec","module":"youtube-dl-exec"}],"x":660,"y":680,"wires":[["68d5040203c27b4d"]]},{"id":"6c856e483f45a597","type":"inject","z":"84ce2b17a7e60da8","name":"BkJRS9Z-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJRS9Z-tgY","payloadType":"str","x":470,"y":660,"wires":[["6452b757c45baa7c"]]},{"id":"68d5040203c27b4d","type":"debug","z":"84ce2b17a7e60da8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":870,"y":680,"wires":[]},{"id":"11b80ade27c10608","type":"inject","z":"84ce2b17a7e60da8","name":"Error URL: BkJRS-tgY","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www.youtube.com/watch?v=BkJRS-tgY","payloadType":"str","x":440,"y":700,"wires":[["6452b757c45baa7c"]]}]
                              

                              Man kann auch die alte payload in die Rückmeldung einbeziehen:

                              function NoReturn(){
                                  msg.payload = "Keine Rückantwort von" + msg.payload;
                                  node.send(msg);
                                  node.done();
                              }
                              

                              a7415458-ad47-47ec-a941-4f6a5ff4c9c9-image.png

                              S Offline
                              S Offline
                              Steff75
                              schrieb am zuletzt editiert von
                              #15

                              @mickym Super, so kann ich das verwenden :)
                              Du hättest aber nicht die halbe Nacht dafür wach bleiben müssen wegen meinem Problem. Tausend Dank! :+1:

                              Wenn es um den reinen Code geht, wie man ihn im Function Node braucht, kann ich leider nur einfache Sachen. Deswegen benutze ich ja solche Software wie Tasker, EventGhost oder Node-Red, wo ich den Ablauf dann einfach visuell abbilden kann. Damit und mit ein bisschen Googlen kann ich die meisten Probleme in der Regel selbst umschiffen. Manchmal, wie in diesem Fall, muss ich dann aber doch nachfragen.

                              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

                              604

                              Online

                              32.4k

                              Benutzer

                              81.5k

                              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