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] Elgato Stream-Deck mit Node-Red auswerten

    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

    [gelöst] Elgato Stream-Deck mit Node-Red auswerten

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

      Hallo Zusammen,

      ich habe mein Stream-Deck an eine VM durchgereicht, da das USB durchreichen in einen LXC nicht funktioniert hat. Das ist aber ein anderes Thema.
      Jetzt versuche ich in Node-Red meine ersten Gehversuche und habe folgendes Problem:

      In Node-Red habe ich das zusätzliche Modul "node-red-contrib-streamdeck" installiert und ich habe zwei neue Nodes "Streamdeck in" und "Streamdeck out". Jetzt wollte ich das ganze an meinen MQTT schicken. und habe dazu einen MQTT-in-Node verwendet.
      flow.png "Streamdeck in" stellt folgendes zur Verfügung was man auch an der Debug-Ausgabe sehen kann. Topic ist die Taste, Payload 1=gedrückt, 0=losgelassen.
      Streamdeckinhelp.png debug1.png
      Leider beschwert sich MQTT über ein fehlendes Topic. Ich habe das so verstanden, dass das Topic vom Streamdeck einfach als Topic an MQTT weitergericht wird wenn man das Topic bei MQTT leer läßt.topicleer.png

      Kann ich das Topic aus der Meldung irgendwie extrahieren, da hier drin die gedrückte Taste enthalten ist. Dann würde ich diese gerne zu einem MQTT-Topic zusammen bauen um so etwas zu haben: "Streamdeck/Taste/Tastennummer", wobei Tastenummer dann das ursprüngliche Stream-Deck-Topic sein soll und der Payload der ursprüngliche.

      Gruß

      Dolomiti

      BananaJoe 1 Reply Last reply Reply Quote 0
      • BananaJoe
        BananaJoe Most Active last edited by

        Um das Pferd mal anders herum aufzuzäumen: Also ich habe bei mir die Stream-Deck Software installiert und "sende" die Tastdrücke per SimpleAPI-Aufrufe, z.B. um Geräte ein oder auszuschalten oder um mir die Live-Daten von Datenpunkten auf den Buttons anzuzeigen.
        Der Weg wäre jetzt vermutlich keine Option?

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

          @dolomiti Nachtrag: Topic ist "Datenpunkt" in MQTT wohin die Daten sollen. Wie im gelben Kasten steht musst du entweder eines angeben (tipp einfach ein Wort ein oder - wenn du Ordner verwenden willst, wort1/wort2 usw.)

          Oder du musst es die msg-Eigenschaften festlegen

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

            das ist eine mqtt-out node und keine mqtt-in node. und topic ist das mqtt-topic wohin es gepublished werden soll.

            sprich du musst halt in das topic feld eintragen:
            Streamdeck/Taste/Tastennummer

            das jetzige topic heißt 5 und ist eine zahl und keine zeichenkette. also trage einfach das topic korrekt ein.

            du kannst auch mit einer Change-node das topic dynamisch festlegen. in dem du das topic dynamisch festlegst, also mit JSONATA.

            "Streamdeck/Taste/" & topic
            

            damit wird die Zahl 5 als String an das Topic angehängt. in diesem Fall lässt du das topic Feld tatsächlich frei und erszeugst das mqtt-topic dynamisch.
            Das geht natürlich auch mit der iobroker-out Node so. Im nächsten Post mache ich aus Deinem geposteten Nachrichtenobjekt einen Flow mit dem topic 5 und einer payload 1.

            @BananaJoe du willst doch nicht die simpleAPI mit den Möglichkeiten von NodeRed als Alternative vorschlagen?

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

              Hier mal zur Veranschaulichung:

              d7effeb8-f16b-4fcc-a5ef-2815f057b832-image.png

              Im ersten Debug siehst Du das Nachrichtenobjekt, sowie es Deine Node ausspukt also topic=5 und die payload=1.

              Nun verwandelst Du das topic mit der Zahl 5 mit einer Change Node entweder in ein gültiges mqtt topic (2. Debug ausgabe)

              ac12ee0f-0c22-4829-b1f7-d53f02dfc38b-image.png
              Im ersten Fall bekommst Du also die Ausgabe auch in Deinem mqtt (bei Dir ist es halt ggf. die Instanz 0):

              fee94a60-fd99-4a07-beda-6b04423ca598-image.png

              oder in einen korrekten Pfad für die iobroker-Out Node zum direkten Schreiben in den iobroker:

              23f597a4-1077-41c0-a06c-5bf0f0c14955-image.png

              Im Fall das direkt in den iobroker zu schreiben:

              78d5c073-af1f-42af-80c2-cfe989e3467a-image.png

              Um das zu ermöglichen solltest Du in Deiner iobroker Out Node ebenfalls das topic freilassen und folgendes beachten:

              1. Du musst den Datenpunkt bereits vorher anlegen
                oder
              2. Du lässt ihn vom NodeRed Adapter dynamisch anlegen, dafür musst Du die Option erstellen, falls der Datenpunkt nicht existiert wählen:
                62b8650d-1f23-4801-a7a4-2adc648b95ae-image.png

              In beiden Fällen musst Du noch als type Value (also ACK=true) eingeben, weil Du ja nichts schaltest, sondern eine Information beschreibst.

              Damit das dynamische Erstellen von Objekten funktioniert, musst Du im iobroker Adapter die Option Fremdobjekte erstellen, auch zulassen.

              Hier der ganze Beispielflow zum Import:

              [{"id":"9eee51cfe62f6abe","type":"inject","z":"289f539dcc33814e","name":"","props":[{"p":"payload"},{"p":"topic","v":"5","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1","payloadType":"num","x":230,"y":6340,"wires":[["85afada1fe3a12ef","c26b2e5841c946d4","da62145e5340a1eb"]]},{"id":"85afada1fe3a12ef","type":"debug","z":"289f539dcc33814e","name":"Eingangsobjekt","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":420,"y":6280,"wires":[]},{"id":"f824bda1a655a269","type":"mqtt out","z":"289f539dcc33814e","name":"","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"be6c1eaab0dff4fe","x":650,"y":6340,"wires":[]},{"id":"c26b2e5841c946d4","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"\"Streamdeck/Taste/\" & topic","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":6340,"wires":[["f824bda1a655a269","e110cfccd7ad029f"]]},{"id":"e110cfccd7ad029f","type":"debug","z":"289f539dcc33814e","name":"mqtt-topic","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":660,"y":6280,"wires":[]},{"id":"da62145e5340a1eb","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"\"0_userdata.0.Test.Streamdeck.Taste.\" & topic","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":6400,"wires":[["0b635e34f1fd1844","9189a2083cd762cb"]]},{"id":"0b635e34f1fd1844","type":"debug","z":"289f539dcc33814e","name":"iobroker-topic","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":640,"y":6460,"wires":[]},{"id":"9189a2083cd762cb","type":"ioBroker out","z":"289f539dcc33814e","name":"","topic":"","ack":"true","autoCreate":"true","stateName":"","role":"","payloadType":"","readonly":"","stateUnit":"","stateMin":"","stateMax":"","x":680,"y":6400,"wires":[]},{"id":"be6c1eaab0dff4fe","type":"mqtt-broker","name":"","broker":"192.168.178.104","port":"1883","clientid":"mqttClientNodeRedTest","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
              

              PS: Wenn Du nicht weißt, wie Du diesen Flow importierst, dann sag Bescheid.

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

                Du kannst natürlich die payload auch noch ändern, wenn Du willst (z. Bsp. in einen Boolean) oder die Ausgabe ggf. modifizieren, womit ein SimpleApi Adapter natürlich überfordert ist. Da brauchst Du dann JS oder Blockly und das ist ja nun wirklich keine Alternative zu NodeRed.

                1 Reply Last reply Reply Quote 0
                • Dolomiti
                  Dolomiti last edited by Dolomiti

                  @BananaJoe
                  So hatte ich das auch zuerst. Das Deck steht an meiner PC-Ecke. Hatte die Software auch auf dem PC installiert, da der aber nur zum zocken läuft habe ich eine Linux-Kiste dort stehen an dem ich sonst arbeite. Deshalb habe ich das Deck an meinen Proxmox-Host angeschlossen und versucht das ganze an einen LXC durchzureichen. Erschwerend kommt hinzu, dass der Proxmox-Host woanders steht als das Deck. Deshalb habe ich von Wiesemann&Theis einen USB-Server installiert der im LAN hängt, an dem das Deck angeschlossen ist.

                  @mickym
                  Super. Das war der Schubs in die richtige Richtung. Der Topic vom Deck ist eine Zahl, MQTT erwartet aber einen String. Ich habe deinen Flow importiert und das jetzt folgendermaßen gebaut um das ganze zu verstehen:
                  flow2.png

                  [{"id":"cb1209d75a81569e","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"d47e6d6f1eb0cca2","type":"streamdeck-in","z":"cb1209d75a81569e","name":"Test","x":150,"y":40,"wires":[["5bcf88ca607fd773","16f3b8339f1c9759","39b41d34d2613e37","28c604885bcf55ae"]]},{"id":"5bcf88ca607fd773","type":"debug","z":"cb1209d75a81569e","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":860,"y":40,"wires":[]},{"id":"609315025dff50f6","type":"mqtt out","z":"cb1209d75a81569e","name":"","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"4bbc8e927819f88d","x":890,"y":120,"wires":[],"inputLabels":["qwe"]},{"id":"16f3b8339f1c9759","type":"change","z":"cb1209d75a81569e","name":"Change 1","rules":[{"t":"set","p":"topic","pt":"msg","to":"\"Streamdeck/Taste/\" & topic","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":440,"y":160,"wires":[["af0836bfe62752bf","609315025dff50f6"]]},{"id":"af0836bfe62752bf","type":"debug","z":"cb1209d75a81569e","name":"debug 36","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":900,"y":180,"wires":[]},{"id":"39b41d34d2613e37","type":"change","z":"cb1209d75a81569e","name":"Change 2","rules":[{"t":"set","p":"payload","pt":"msg","to":"topic","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"Streamdeck/Taster","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":440,"y":200,"wires":[["24d1e66e3435137d","ec8a0ca01943ad9c","cc685092e66f092c"]]},{"id":"24d1e66e3435137d","type":"mqtt out","z":"cb1209d75a81569e","name":"","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"4bbc8e927819f88d","x":690,"y":200,"wires":[],"inputLabels":["qwe"]},{"id":"ec8a0ca01943ad9c","type":"debug","z":"cb1209d75a81569e","name":"debug 37","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":720,"y":260,"wires":[]},{"id":"cc685092e66f092c","type":"debug","z":"cb1209d75a81569e","name":"debug 38","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"topic","targetType":"msg","statusVal":"","statusType":"auto","x":720,"y":300,"wires":[]},{"id":"28c604885bcf55ae","type":"switch","z":"cb1209d75a81569e","name":"","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"5","vt":"num"},{"t":"eq","v":"10","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":270,"y":340,"wires":[["a71ca0a6f4f0244c"],["73bad0d84f40b808"]]},{"id":"adfc89f8f94b60d6","type":"mqtt out","z":"cb1209d75a81569e","name":"","topic":"shellies/LichtFlur/relay/0/command","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"4bbc8e927819f88d","x":860,"y":360,"wires":[],"inputLabels":["qwe"]},{"id":"a71ca0a6f4f0244c","type":"change","z":"cb1209d75a81569e","name":"Taste 5 Licht an","rules":[{"t":"set","p":"payload","pt":"msg","to":"on","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":480,"y":320,"wires":[["adfc89f8f94b60d6"]]},{"id":"73bad0d84f40b808","type":"change","z":"cb1209d75a81569e","name":"Taste 10 Licht aus","rules":[{"t":"set","p":"payload","pt":"msg","to":"off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":360,"wires":[["adfc89f8f94b60d6"]]},{"id":"4bbc8e927819f88d","type":"mqtt-broker","name":"","broker":"localhost","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
                  

                  Im Change 1 habe ich das so gemacht wie von dir beschrieben. Bei Change 2 wird nur die Tastennummer gesendet
                  Objekte.png

                  Vielen Dank für die Hilfe

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  461
                  Online

                  31.9k
                  Users

                  80.2k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  442
                  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