NEWS
[gelöst] Elgato Stream-Deck mit Node-Red auswerten
-
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.
"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.
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.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
-
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? -
@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
-
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/Tastennummerdas 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?
-
Hier mal zur Veranschaulichung:
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)
Im ersten Fall bekommst Du also die Ausgabe auch in Deinem mqtt (bei Dir ist es halt ggf. die Instanz 0):oder in einen korrekten Pfad für die iobroker-Out Node zum direkten Schreiben in den iobroker:
Im Fall das direkt in den iobroker zu schreiben:
Um das zu ermöglichen solltest Du in Deiner iobroker Out Node ebenfalls das topic freilassen und folgendes beachten:
- Du musst den Datenpunkt bereits vorher anlegen
oder - Du lässt ihn vom NodeRed Adapter dynamisch anlegen, dafür musst Du die Option erstellen, falls der Datenpunkt nicht existiert wählen:
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:
PS: Wenn Du nicht weißt, wie Du diesen Flow importierst, dann sag Bescheid.
- Du musst den Datenpunkt bereits vorher anlegen
-
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.
-
@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:
Im Change 1 habe ich das so gemacht wie von dir beschrieben. Bei Change 2 wird nur die Tastennummer gesendet
Vielen Dank für die Hilfe