Tastatur mit LCD hinter den Tasten: Elgato Stream Deck

Begonnen von peterk_de, 31 Mai 2017, 17:20:16

Vorheriges Thema - Nächstes Thema

peterk_de

Hallo zusammen,

eben entdeckt, und fast aus Reflex auf Kaufen gedrückt:

https://www.elgato.com/en/gaming/stream-deck

15 transparente Hardware-Buttons, hinter denen jeweils ein Vollfarb-Display liegt. Sowas wollte ich schon immer haben für meinen Nachttisch als Ergänzung / Ersatz für meine Tablet-UI, da ein Touchdisplay im Halbschlaf kaum zu bedienen ist und eine reine Hardwaretastatur mir zu unflexibel ist ...

Und das beste, es gibt schon funktionsfähige Ansätze, das Ding zu sinnvolleren Sachen zu missbrauchen, als wofür es verkauft wird:

https://github.com/Lange/node-elgato-stream-deck

Soll sogar auf dem Raspi laufen - ein Traum (node js). Hat das Teil hier in der Gemeinde evtl. schon jemand?

FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

peterk_de

Also testhalber musste ich mir das Ding dann doch mal bestellen ...

Erstes Test-Zwischenergebnis:

Von der Hardware bin ich angesichts des Preises von 150 Euro nicht 100% überzeugt. Sie ist OK, aber die ganzen euphorischen Rezensionen kann ich nicht unterschreiben. Es scheint ein großes (mittelprächtiges) LCD in dem Deck zu stecken, nicht jeweils separate für jede Taste. Wenn man die Tasten nur wenig über den Druckpunkt hinaus strapaziert, hat man die typischen LCD-Farbschlieren. Kein echter Show-Stopper, aber nun ja ... Die Auflösung ist auch nicht "Retina", man erkennt in 30 cm noch das Pixelraster, dadurch wirkt es billiger als es müsste.

Der Blickwinkel ist hingegen erstaunlich gut, obwohl das LCD sehr weit hinter den Tasten sitzt. Die Tasten selbst sind leise und haben einen recht weichen Anschlag. Der Druckpunkt geht voll in Ordnung. Das Gehäuse ist stabil und gut verarbeitet. Der Standfuß ist wackelig, denn da liegt es nur locker drin, das werde ich ankleben müssen.

Den stolzen Preis sieht man ihm insgesamt also nicht wirklich an. Rein vom Gefühl her fände ich hier _maximal_ die Hälfte angemessen. Leider ist es aber trotz der Macken alternativlos, passt zu 100% in meinen Usecase (Nachttisch) und ist auch noch WAF-kompatibel, da echte Knöpfe dran sind statt rumgetatsche...

Die Software (für den Mac) habe ich spaßeshalber einmal ausprobiert ... aber sie stürzte in einer Endlosschleife ab und zeigte nur ein nicht funktionierendes "Bitte Fehlerbericht senden"-Dialogfeld. Ältere Version, Neuinstallieren, ... nix half, das wäre ein Fall für den Support (aber das ist ja auch primär für Gamer aka Windows-User ... wird also aus der Zielgruppe keinen stören). Für nen Test unter Windows war ich zu faul, da mir die Software von Elgato eigentlich eh egal ist.

Die node.js-Library hingegen - also das für uns interessante - funktioniert anstandslos, wenn man sie erstmal installiert bekommen hat (node-hid ist etwas zickig). Anbei einmal ein erster Screenshot von dem Teil am Raspberry ...
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

peterk_de

Ich habe mir da jetzt in Node.js etwas gebaut, was mit einem Raspberry 2 und mit FHEM schon ganz gut funktioniert ... ich mache gerade selbst einen Alpha-Test. Falls es Interessierte gibt, würde ich den Code noch weiter aufpolieren und das mal irgendwo hochladen, momentan ist der Code zwar schon sehr featurereich, aber noch nicht sehr sauber ;)

Insgesamt ist das Teil schon sehr, sehr cool ... zwar am Raspi 2 nicht sonderlich flott (zumindest das Refreshen der Anzeige, die Button-Events kommen hingegen quasi ohne Lag) und die Hardware wie gesagt auch noch nicht perfekt, aber besser die Bedienbarkeit zum Knöpfchendrücken ist definitiv besser als jeder Touchscreen.

Bis jetzt läuft:


  • Alle Tasten sind mit beliebigen FHEM-Kommandos belegbar
  • Mehrere Seiten mit verschiedenen Buttonsets
  • Wechsel der Seiten per FHEM-Dummy oder per Button auf dem Streamdeck (Dummy wird Synchron gehalten)
  • Wählbar, ob FHEM-Kommando per Longpress, Shortpress oder KeyUp/Keydown ausgelöst wird
  • Icons der Buttons: Beliebige SVG/PNG-Dateien (auch die openautomation-Grafiken von FHEM etc.)
  • Farbe des Icons und des Button-Hintergundes per Konfigurationsdatei einstellbar
  • Textlabel für jeden Button per Konfigurationsdatei einstellbar (muss nicht in die Bilddatei fest eingefügt werden)
  • Die Buttons sind "Multistate-Buttons" (vgl. Multistate-Button von Tablet-UI), d.h. sie können nicht nur ein Icon und Kommando für an/aus, sondern beliebig viele Zustände haben, die sie per "Longpoll" (Telnet Inform) von FHEM automatisch aktualisieren
  • "Dynamische Belegung": Auf Wunsch können Buttons von den Tasten per FHEM-Regex verschwinden bzw. ihre Position automatisch wählen und so Platz für weitere Buttons machen (z.B. zur Anzeige offener Fenster)
  • Einstellung der Displayhelligkeit über einen FHEM-Dummy
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

xaver88

Hi

der Code würde mich interessieren
habe das Stream Deck seit letzter Woche auch hier, bekomme aber die Beispiele nicht alle zum laufen
(fillcolor geht nicht und das mit dem Text geht auch nicht)
Grafiken hinterlegen habe ich hin bekommen

wie geht das mit dem Longpress?

Hast Du den Coder schon irgendwo hochgeladen?

peterk_de

Hi, mangels Resonanz habe ich das noch nirgends hochgeladen, werde ich nun demnächst aber mal angehen. Es läuft bei mir 24/7 als Nachttisch-Tablet, bin sehr zufrieden.

Longpress kann die Library von denen nicht, habe ich selbst implementiert, neben  diversen anderen Sachen. Gibt auch noch vieles  was man noch zusätzlich  einbauen könnte (Doppelklick wär noch nützlich und dynamische Grafiken und Texte, also z.B. um Wetter-Icons hinzupushen oder Temperaturen anzuzeigen), aber als Bedien- und Statustablet ist es uneingeschränkt nutzbar und wirklich super blind zu bedienen.

Ich hab sogar (fast) die Funktionalität von Homematic-Tastern abgebildet: Kurzer Druck  kann dann eine Lampe z.B. an/ausschalten, gedrückt halten langsam Dimmen ...

Ab und an schlägt am Raspi allerdings mal ein Schreibbefehl fehl, so dass ein Button nicht neu bemalt wird - vermutlich wegen des langsamen USB-Busses. Aber die entsprechende Exception habe ich abgefangen und das Nodeskript  läuft und läuft ... :)

Die Beispiele liefen bei mir alle. Musst ggf mal nach fehlenden Paketen suchen und nachinstallieren.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

xaver88

Hi

ich denke nicht, dass es an Paketen liegt (da müsste ja eine Fehlermeldung kommen oder?)

beim fillcolor z.B. werden die Tasten immer nur weis (bzw grau)

kann es sein, dass die "neueren" Boards schon eine andere Firmware haben?

herrmannj

ach, guck ma schau. Hab den thread heute das erste Mal gesehen. Schick! Wie ist das denn Nachts? Bekommt man die Tasten komplett gaaanz dunkel ?

vg
joerg

xaver88


herrmannj

und wenn man was mitteilen möchte stellt dann die Helligkeit via fhem hoch ? Schei..e geil!

peterk_de

Klassische 8-Bit regelung: Alles unter 9 ist komplett aus (Backlight aus), darüber ist der unterste Wert erträglich dunkel um daneben schlafen zu können. Und ich bin da sehr empfindlich, hatte vorher ein OLED-Tablet wegen der Blendwirkung.

Ich lad es dieses WE noch hier in den Thread.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

peterk_de

Ach so und ja das ding hängt per Telnet inform an FHEM und lauscht auf einen Dummy, bei dem kann man dann per Reading Helligkeit und Bildschirmseite (mehrere Seiten mit unterschiedlichen Buttons sind möglich) einstellen.

FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

peterk_de

#11
Ich hab es leider nicht geschafft, das Skript fürs Deployment vorzubereiten ... also noch keine tolle Doku, keine schöne Beispiel-Konfiguration und kein fertiges Package ... Damit ihr trotzdem was zum Spielen habt, anbei mal mein Folder-Snapshot von der bei mir laufenden Version. Es sind deshalb leider aktuell zwingend einige Node.js-Kenntnisse zur Nutzung erforderlich.

Nach dem Entpacken erstmal die fehlenden Node-Pakete nachinstallieren. Dann config.json anpassen. Nicht vergessen, in FHEM einen entsprechenden Dummy für das Streamdeckdevice anzulegen.

Dann start mit sudo node main.js (oder index.js, dann wird bei Fehlern automatisch restartet per forever - ist aber eigentlich nicht nötig, wenn das Teil luft, läuft es auch ...; sudo braucht ihr nicht, wenn ihr das streamdeck-device per udev für alle Nutzer schreibbar gemacht habt. Am besten erstmal die Beispiele aus der node-streamdeck-API zum Laufen bringen!)

Wichtigstes zur config.json

Der grobe Aufbau ist folgendermaßen - bitte achtet auf korrektes JSON, sonst startet das Programm nicht!

{

  "fhemHost":"192.168.178.57",
  "fhemTelnetPort":"7073",
 
  "fhemStreamDeckDummy":"schlafzimmer.streamdeck",

  "buttonTemplates": {
    ...
  },
  "buttons": {
    ...
  },
  "pages": {
     ...
  }

}


Definition von Buttons

Der Abschnitt buttons enthält alle Button-Definitionen. Man gibt dem Button da einen eindeutigen Namen, ordnet ein FHEM-Device zu, stellt Icon, Farbe etc. ein und so weiter. Der Button wird dann aber noch nicht angezeigt.

Buttons können verschiedene States haben. Das Prinzip ist wie bei den Multistate-Buttons bei Tablet-UI. Nur noch etwas weitergehender. Erläuterung folgt ;)


Anordnen der Buttons auf den Tasten - "Bildschirmseiten"

Buttons werden erst angezeigt, wenn man sie im Abschnitt pages einer oder mehreren Bildschirmseiten hinzufügt. Eine Seite muss man also mindestens definieren. Durch dieses Prinzip kann man dann sehr bequem den selben Button gleich auf mehreren Seiten anzeigen, ohne viel Codewiederholungen.

Die aktuell angezeigte Seite wird über den FHEM-Dummy eingestellt. Will man per Streamdeck selbst die Seite wechseln, muss man einen Button anlegen, der den FHEM-Dummy entsprechend umsetzt.

Definition einer Beispielseite

"Default": {

      "Nachtlicht":[1],
      "Treppenlicht":[2],
      "SZDeckenlicht":[3],
      "TreppenlichtOben":[4],     
      "Wohnungsmodus":[5],

      "KZDeckenlicht":[11,12,13,14,15],
      "TreppenlichtUnten":[11,12,13,14,15],
      "WZDeckenlicht":[11,12,13,14,15],
      "BOWandlicht":[11,12,13,14,15],
      "KZTuer":[11,12,13,14,15],
      "Kellertuer":[11,12,13,14,15],
      "Balkontuer":[11,12,13,14,15],
      "Haustuer":[11,12,13,14,15],
      "BUTuer":[11,12,13,14,15],     
      "BOTuer":[11,12,13,14,15]

}


Die ersten 5 Buttons (Nachtlicht, Treppenlicht, ...) haben genau eine Feste Position zugeordnet bekommen (die 15 Tasten des Streamdecks sind in meinem Skript intuitiv in Leserichtung beginnend mit 1 oben links durchnummeriert, oben Links ist also die Nachtlicht-Taste.) Das ist sicher simpel ;)

Buttons verstecken + nachrücken lassen

Die nächsten 10 Buttons haben jedoch jeweils mehrere Positionen zugeordnet bekommen, und zwar alle jeweils die 5 Tasten der mittleren Reihe - 11 bis 15. Das führt dazu, dass das Skript diese Buttons automatisch auf die erste freie Taste in diesem Bereich legt - ist auf Button 11 schon ein Button, wird Button 12 probiert usw. Wozu? Nun, man kann Buttons mit der Eigenschaft "hidden":"true" in Abhängigkeit von einem Regex verstecken - der Platz kann dann vom nächsten (nicht ausgeblendeten) Button belegt werden. In diesem Beispiel wurden die Buttons für die 10 Lampen / Türen so definiert, dass sie nur sichtbar sind, wenn die jeweilige Tür offen bzw. das Licht angeschaltet ist Die ersten 5, auf die das zutrifft, sieht man dann; sollten einmal mehr im "anzeigewürdigen Zustand" sein, werden die überzähligen nicht angezeigt (in diesem Beispiel hier würde man nur die ersten 5 Buttons sehen, auch wenn 6 Türen offen sind).


Template-System

Des weiteren wird für die Buttons ein Template-System unterstützt - die Benutzung ist optional, aber sehr Praktisch. Man kann sich z.B. ein Template "Homematic-Dimmer" im Bereich buttonTemplates der config-Datei anlegen, in dem man das ganze Schaltverhalten (Shortpress/Longpress/Event-Regex etc.) hinterlegt; also das, was für alle Homematic-Dimmer gleich ist:

     "HM_Dimmer": {
        "label":"Dimmer",
        "fhem-reading": "pct",
        "lockStateWhileDown":true,
        "states": {
          "off": {
            "shortPress": "set %DEVICE% pct 100", 
            "longPressRepeat": "set %DEVICE% up",                 
             "fhem-value-regex":"0"
           },
          "dimming": {
            "icon": "./img/wait.png",
            "fhem-reading": "dim",
            "shortPress": "set %DEVICE% pct 0",
            "longPressRepeat": "set %DEVICE% down",                             
            "fhem-value-regex":".*(up|down).*"
          },
          "on": {
            "shortPress": "set %DEVICE% pct 0",
            "longPressRepeat": "set %DEVICE% down",
            "fhem-value-regex":".*"
           }                     
        }
     },


Im Abschnitt buttons wird dann Für jeden Dimmer ein Label, ggf. ein anderes Icon (Angaben beim Button überschreiben die Vor-Einstellungen des Templates) und ein konkretes FHEM-Device ergänzt:

     "WZDeckenlicht": {
        "template":"HM_Dimmer",     
        "label":"Stube",
        "fhem-device": "stube.deckenlicht.dimmer"
     },


Den Rest müsst ihr euch erstmal selbst im Code anschauen. Ich ergänze das gern nach und nach, dauert aber leider noch etwas ;(

Known Bugs:

- Labels werden nicht zentriert
- gelegentliche Write-Timeouts in Richtung Streamdeck-Device
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

nils_

sehr cool....

ich sehe mich schon nachher den bestell-knopf drücken  ::)
viele Wege in FHEM es gibt!

Per

Zitat von: peterk_de am 31 Mai 2017, 17:20:16Sowas wollte ich schon immer haben für meinen Nachttisch als Ergänzung / Ersatz für meine Tablet-UI, da ein Touchdisplay im Halbschlaf kaum zu bedienen ist und eine reine Hardwaretastatur mir zu unflexibel ist ...
Gabs doch aber schon zu DOS-Zeiten! Sogar mit echten Microtastern und Einzel-Displays.

Zitat von: peterk_de am 31 Mai 2017, 17:20:16Soll sogar auf dem Raspi laufen - ein Traum (node js).
Und damit ist es bei mir raus. Node.js verfügt leider über keine, für mich nachvollziehbare Installationsanweisung.

Zitat von: peterk_de am 02 Juni 2017, 23:11:31Es scheint ein großes (mittelprächtiges) LCD in dem Deck zu stecken, nicht jeweils separate für jede Taste.
[...]
Den stolzen Preis sieht man ihm insgesamt also nicht wirklich an. Rein vom Gefühl her fände ich hier _maximal_ die Hälfte angemessen. Leider ist es aber trotz der Macken alternativlos, passt zu 100% in meinen Usecase (Nachttisch) und ist auch noch WAF-kompatibel, da echte Knöpfe dran sind statt rumgetatsche...
Ein "normales" OLED/LCD und ein Plexiglasgitter drüber, schon kann man es blind ertasten ;).

peterk_de

#14
Per, ich hab echt schon lange und immer mal wieder nach sowas gesucht ... das ist leider das einzige Gerät, das mir dabei begegnet ist (in einigermaßen verträglichen Comsumer-Preisbereichen). Wie oben geschrieben, leider trotzdem nicht perfekt. Falls es Alternativen gibt, wäre ich daran sehr interessiert, insbesondere welche die etwas preisgünstiger sind ;)

Aber besser als ein Touchscreen mit Plexiglas-Gitter ist es dann doch, das haptische Feedback der "echten" Tasten ist schon schick...

Theoretisch müsste das auch ohne Node.js gehen, wenn einer in Perl die Ansteuerung nachbaut ... da dann aber noch recht viel über den reinen Treiber "oben drüber" muss, hab ich darauf verzichtet. Wenn sich das jemand antun möchte, wäre das sicher schick ;) Andererseits ist ein aktuelles node.js mit einem Einzeiler automatisch auf diversen Plattformen installiert - https://github.com/nodesource/distributions
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...