Externe Integration - Roku

Hallo zusammen! :waving_hand:

Zweiter Teil der nordamerikanischen Serie :united_states:: Roku, der Streaming-Nummer 1 in den USA, als Box, als Stick oder als „Roku TV“-Fernseher. Wie bei Android TV läuft hier alles lokal über die offizielle Roku-API, ohne Konto oder Cloud.

Was es kann

  • Automatische Erkennung der Roku-Geräte im Netzwerk im Entdeckungs-Tab, mit manueller IP-Eingabe als Backup. Jedes Roku wird an seiner Seriennummer erkannt, auch wenn sich die Adresse ändert.
  • Roku TV: Ein-/Ausschalten, Auswahl des Eingangs (HDMI oder Antenne), Lautstärke, Stummschaltung und Kanäle.
  • Alle Roku-Geräte: Die aktive App (angezeigt und änderbar), der Wiedergabestatus, die Tasten der Fernbedienung.
  • Drei Widgets: Eine Fernbedienung, die aktuelle Wiedergabe mit dem App-Symbol und App-Kürzel mit ihren Icons.
  • Szenen: Ein Trigger „App gewechselt“ und Aktionen „App öffnen“ und „Taste drücken“.

Das coole Feature

Netflix startet auf dem Wohnzimmer-TV → gedimmtes Licht :popcorn:
22:30 Uhr unter der Woche → die Roku TV schaltet sich automatisch aus :sleeping_face:

Installation

:warning: Gladys 5.1 mindestens.

  1. Auf dem Roku: Einstellungen → System → Erweitere Systemeinstellungen → Steuerung durch mobile Apps → Aktiviert. Bei einer Roku TV auch den schnellen TV-Start aktivieren.
  2. In Gladys: Integrationen → Roku → Installieren, dann den Tab Entdeckung, um deine Geräte hinzuzufügen.

Kleine ehrliche Einschränkungen: Roku gibt keinen Lautstärkepegel an, nur + / − Tasten, und eine Roku-Box schaltet sich nicht wirklich aus (der Status wird nur angezeigt).

:warning: Ohne Hardware entwickelt, habe ich kein Roku: Die Tests basieren auf echten Geräteantworten, aber nichts ist so gut wie ein Test bei euch. @ruegerth, wie versprochen, jetzt ist es soweit :wink:

Wie die vorherigen wurde sie mit Claude Code :robot: entwickelt.

Repository: GitHub - guim31/gladys-roku: Roku TVs and streaming players, local control (ECP) for Gladys Assistant · GitHub

Sagt mir, was fehlt :folded_hands:

Fast … super Arbeit.
Hier mein Test:

  1. Neuinstallation Gladys v5.1.4

mit Standort Quebec :wink:

  1. Auf dem Roku Express 4k Stick die Einstellungen wie vorgegeben übernommen ( Einstellungen - System - Erweiterte Systemeinstellungen - Steuerung durch mobile Apps - Aktiviert )

  2. In Gladys zur Schnelligkeit und Vereinfachung diverse Dienste abgeschaltet:

  1. Dashboard erstellt, Zeit und Sonne hinzugefügt:

  1. Die Integration Roku installiert, sie öffnet standardmäßig zum ersten Mal den Tab Konfiguration:

Die erste Anzeige:

Dort dann die lokale IP des Roku Sticks eingegeben und Test durchgeführt … erfolgreich:

Auf dem Startdashboard nacheinander alle verfügbaren Widgets aktiviert:

  • Remote

  • Playback

  • App

Hier der erste Problempunkt. Es werden nicht alle im Roku Stick installierten Apps ( also von Youtube bis ARD bis Arte ) angezeigt. So fehlen zB Disney, KiKa, RTL und weitere :frowning:

Das Dashboard mit den Roku Widgets:

ERSTE TESTS:

Ich kann in Roku Apps die dort angezeigten Apps auswählen, also aktuell Youtube, ZDF, ARD und Arte. Bei der Auswahl werden diese dann im Widget ROKU PLAYBACK angezeigt und auch gleichzeitig auf dem TV !!!, aber

Die Tasten PLAY/PAUSE und REPLAY funktionieren nicht. Ich kann sie anklicken, aber keine Reaktion auf dem TV erkennbar.

GEGENTEST:

Auswahl mit Remote direkt am Stick, dort ARTE ausgewählt. Die Widgets reagieren darauf und zeigen an:

Wenn ich dann im Widget Remote auf Home klicke passiert folgendes:

Hier das dazugehörige Debug Log mit den o.a. Schritten:

[2026-10-10T07:51:05.087Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:51:05.108Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (20 ms)
[2026-10-10T07:51:05.123Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (9 ms)
[2026-10-10T07:51:05.128Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:51:15.078Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (30 ms)
[2026-10-10T07:51:15.090Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:51:15.112Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:51:15.127Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (9 ms)
[2026-10-10T07:51:15.132Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:51:15.144Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/apps -> HTTP 200 (12 ms)
[2026-10-10T07:51:25.084Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (36 ms)
[2026-10-10T07:51:25.091Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:51:25.113Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:51:25.131Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (10 ms)
[2026-10-10T07:51:25.135Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:51:35.086Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (36 ms)
[2026-10-10T07:51:35.097Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:51:35.119Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:51:35.139Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (10 ms)
[2026-10-10T07:51:35.145Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:51:45.081Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (31 ms)
[2026-10-10T07:51:45.102Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:51:45.120Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (18 ms)
[2026-10-10T07:51:45.141Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (13 ms)
[2026-10-10T07:51:45.145Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:51:55.080Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (29 ms)
[2026-10-10T07:51:55.088Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:51:55.108Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (20 ms)
[2026-10-10T07:51:55.129Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (14 ms)
[2026-10-10T07:51:55.135Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:52:05.076Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (25 ms)
[2026-10-10T07:52:05.083Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:52:05.106Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:52:05.126Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (14 ms)
[2026-10-10T07:52:05.133Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:52:15.087Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (35 ms)
[2026-10-10T07:52:15.094Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:52:15.117Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:52:15.135Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (12 ms)
[2026-10-10T07:52:15.141Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:52:25.084Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (31 ms)
[2026-10-10T07:52:25.091Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:52:25.111Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (20 ms)
[2026-10-10T07:52:25.128Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (12 ms)
[2026-10-10T07:52:25.133Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:52:25.146Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/apps -> HTTP 200 (13 ms)
[2026-10-10T07:52:35.082Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (29 ms)
[2026-10-10T07:52:35.092Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:52:35.114Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:52:35.133Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (12 ms)
[2026-10-10T07:52:35.141Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:52:45.085Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (31 ms)
[2026-10-10T07:52:45.113Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:52:45.137Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (24 ms)
[2026-10-10T07:52:45.154Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (12 ms)
[2026-10-10T07:52:45.160Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:52:55.089Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (35 ms)
[2026-10-10T07:52:55.102Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:52:55.126Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (24 ms)
[2026-10-10T07:52:55.151Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (13 ms)
[2026-10-10T07:52:55.161Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:52:55.174Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): published app=737818
[2026-10-10T07:52:55.174Z] [DEBUG] Scene event app_changed: Arte on Roku Express 4K
[2026-10-10T07:53:05.083Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (29 ms)
[2026-10-10T07:53:05.093Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:53:05.113Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (19 ms)
[2026-10-10T07:53:05.127Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (8 ms)
[2026-10-10T07:53:05.133Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:53:15.088Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (34 ms)
[2026-10-10T07:53:15.099Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:53:15.122Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (23 ms)
[2026-10-10T07:53:15.138Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (10 ms)
[2026-10-10T07:53:15.142Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:53:25.082Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (26 ms)
[2026-10-10T07:53:25.090Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:53:25.113Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (23 ms)
[2026-10-10T07:53:25.130Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (12 ms)
[2026-10-10T07:53:25.138Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:53:35.087Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (31 ms)
[2026-10-10T07:53:35.093Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:53:35.115Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:53:35.134Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (12 ms)
[2026-10-10T07:53:35.139Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:53:45.084Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (27 ms)
[2026-10-10T07:53:45.090Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:53:45.115Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (25 ms)
[2026-10-10T07:53:45.134Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (11 ms)
[2026-10-10T07:53:45.140Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:53:55.086Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (29 ms)
[2026-10-10T07:53:55.101Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:53:55.122Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (21 ms)
[2026-10-10T07:53:55.139Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (11 ms)
[2026-10-10T07:53:55.145Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:54:05.085Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (28 ms)
[2026-10-10T07:54:05.092Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:54:05.114Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:54:05.130Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (10 ms)
[2026-10-10T07:54:05.137Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:54:15.090Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (32 ms)
[2026-10-10T07:54:15.097Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:54:15.117Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (20 ms)
[2026-10-10T07:54:15.133Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (11 ms)
[2026-10-10T07:54:15.142Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:54:25.095Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (36 ms)
[2026-10-10T07:54:25.104Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:54:25.127Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (23 ms)
[2026-10-10T07:54:25.144Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (12 ms)
[2026-10-10T07:54:25.151Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:54:35.089Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (30 ms)
[2026-10-10T07:54:35.095Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:54:35.115Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (20 ms)
[2026-10-10T07:54:35.130Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (9 ms)
[2026-10-10T07:54:35.138Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:54:45.087Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (26 ms)
[2026-10-10T07:54:45.096Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:54:45.114Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (18 ms)
[2026-10-10T07:54:45.129Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (9 ms)
[2026-10-10T07:54:45.135Z] [DEBUG] [roku] Roku Express 4K: app=737818 (Arte), player=close
[2026-10-10T07:54:54.503Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): key Home
[2026-10-10T07:54:54.553Z] [DEBUG] [roku:ecp] POST 192.168.0.224/keypress/Home -> HTTP 200 (50 ms)
[2026-10-10T07:54:55.078Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (17 ms)
[2026-10-10T07:54:55.085Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:54:55.105Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (20 ms)
[2026-10-10T07:54:55.110Z] [DEBUG] [roku] Roku Express 4K: app=home (Home), player=-
[2026-10-10T07:54:55.124Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): published app=home
[2026-10-10T07:54:55.125Z] [DEBUG] Scene event app_changed: Home on Roku Express 4K
[2026-10-10T07:54:56.069Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (16 ms)
[2026-10-10T07:54:56.078Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:54:56.101Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:54:56.118Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (11 ms)
[2026-10-10T07:54:56.124Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:54:56.137Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/apps -> HTTP 200 (13 ms)
[2026-10-10T07:54:56.157Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): published app=562859
[2026-10-10T07:54:56.157Z] [DEBUG] Scene event app_changed: Roku Dynamic Menu on Roku Express 4K
[2026-10-10T07:55:05.088Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (27 ms)
[2026-10-10T07:55:05.097Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:55:05.115Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (18 ms)
[2026-10-10T07:55:05.134Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (12 ms)
[2026-10-10T07:55:05.140Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:55:15.095Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (34 ms)
[2026-10-10T07:55:15.103Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:55:15.124Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (21 ms)
[2026-10-10T07:55:15.143Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (11 ms)
[2026-10-10T07:55:15.149Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:55:25.096Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (34 ms)
[2026-10-10T07:55:25.102Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:55:25.134Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (32 ms)
[2026-10-10T07:55:25.156Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (15 ms)
[2026-10-10T07:55:25.160Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:55:35.094Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (32 ms)
[2026-10-10T07:55:35.102Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:55:35.117Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (15 ms)
[2026-10-10T07:55:35.136Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (14 ms)
[2026-10-10T07:55:35.145Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:55:45.090Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (27 ms)
[2026-10-10T07:55:45.098Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:55:45.118Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (20 ms)
[2026-10-10T07:55:45.140Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (16 ms)
[2026-10-10T07:55:45.144Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:55:55.092Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (29 ms)
[2026-10-10T07:55:55.098Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:55:55.120Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:55:55.136Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (10 ms)
[2026-10-10T07:55:55.143Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:56:05.090Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (27 ms)
[2026-10-10T07:56:05.099Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:56:05.120Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (21 ms)
[2026-10-10T07:56:05.138Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (13 ms)
[2026-10-10T07:56:05.145Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:56:05.160Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/apps -> HTTP 200 (14 ms)
[2026-10-10T07:56:15.095Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (31 ms)
[2026-10-10T07:56:15.103Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:56:15.120Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (16 ms)
[2026-10-10T07:56:15.138Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (11 ms)
[2026-10-10T07:56:15.143Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:56:25.092Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (28 ms)
[2026-10-10T07:56:25.104Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:56:25.126Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (22 ms)
[2026-10-10T07:56:25.143Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (13 ms)
[2026-10-10T07:56:25.150Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:56:35.095Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (29 ms)
[2026-10-10T07:56:35.102Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:56:35.120Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (18 ms)
[2026-10-10T07:56:35.137Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (9 ms)
[2026-10-10T07:56:35.143Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:56:45.093Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (28 ms)
[2026-10-10T07:56:45.101Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:56:45.121Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (20 ms)
[2026-10-10T07:56:45.137Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (12 ms)
[2026-10-10T07:56:45.147Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:56:55.105Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (39 ms)
[2026-10-10T07:56:55.114Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:56:55.141Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (26 ms)
[2026-10-10T07:56:55.160Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (13 ms)
[2026-10-10T07:56:55.165Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close
[2026-10-10T07:57:05.094Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/device-info -> HTTP 200 (28 ms)
[2026-10-10T07:57:05.100Z] [DEBUG] [roku] Roku Express 4K (192.168.0.224): Roku Roku Express 4K [3940EU2], box, Roku OS 15.3.4, power-mode=PowerOn
[2026-10-10T07:57:05.130Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/active-app -> HTTP 200 (30 ms)
[2026-10-10T07:57:05.150Z] [DEBUG] [roku:ecp] GET 192.168.0.224/query/media-player -> HTTP 200 (14 ms)
[2026-10-10T07:57:05.156Z] [DEBUG] [roku] Roku Express 4K: app=562859 (Roku Dynamic Menu), player=close

… wird fortgesetzt, jetzt erst Mal einen Kaffe … super Arbeit bis hierher, sieht gut aus

Fortsetzung der Tests:

Frage: Was passiert wenn ich mit der Fernbedienung eine App auswähle, die nicht in der Integration angezeigt wird.

Ergebnis:

Sie wird angezeigt, aber jetzt wird es kompliziert. Wenn ich im Widget Roku Playback auf « Play » klicke, dann geht die Roku Disney App ihren nächsten Schritt … auf dem TV erscheint die Auswahl des Profiles… und nun?
Na ich klicke mal einfach im Widget Roku Remote auf Keys… keine Reaktion, also lasse ich mal einfach in der Diesney App die dortige Auswahl ( des letzten Users ) stehen und klicke auf « OK » … das geht. Die App macht weiter, aber:

Die Disney App verlangt nun die Eingabe eines Passwortes. Das wird mir so auch auf dem TV angezeigt, aber da ich die « Keys » im Widget Roku Remote nicht bedienen kann bzw. sie nicht reagieren, endet hier dieser Test

Nächste Runde:

  • Roku Apps: Select App « ZDF » … geht
  • Roku Playback: Buttons gehen alle nicht
  • Roku Remote:

Einfach mal auf « OK » geklickt, da die APP ja automatisiert etwas als « markiert » anbietet… geht…
dann wieder auf « OK » geklickt, da in der App die « Wiedergabe » markiert ist … geht… die Wiedergabe beginnt.

Dann während der Wiedergabe in

  • Roku Playback: Button Play/Pause geht jetzt, Wiedergabe stoppt, dann
  • Roku Playback: Button Replay reagiert nicht… keine Änderung

Dann während Wiedergabe gestoppt ist in

  • Roku Remote: Button OK 2x geklickt … Wiedergabe wird fortgesetzt

Ein großes Dankeschön an @ruegerth für diese super detaillierten Tests mit Screenshots und Logs: genau das, was ich brauchte :folded_hands:

Die 1.0.3 ist veröffentlicht, sie behebt alles, was du gemeldet hast:

  • Die Widget-Buttons „Wiedergabe“ : Das Problem kam von Gladys, nicht von deinem TV. Bevor Gladys einen Tastendruck ausführt, liest sie den Inhalt des Widgets erneut, mit einer Grenze von 30 Neuauslesungen pro Minute. Meine Widgets wurden viel zu oft neu geladen, die Grenze wurde erreicht, und Gladys verweigerte dann den Tastendruck ohne etwas zu sagen. Daher funktionierten die Buttons „manchmal“ (bei Disney+ ja, bei Arte nein). Das ist behoben: Die Widgets werden viel seltener neu geladen, und das Widget zeigt den neuen Zustand direkt nach dem Tastendruck an.
  • Der Button „Tasten…“ konnte nicht funktionieren: Er öffnete ein Formular, das die aktuelle Version von Gladys noch nicht kennt. Er wurde durch ein neues Widget „Roku-Navigation“ mit den vier Pfeilen ersetzt, das neben der Fernbedienung platziert werden kann. Die Fernbedienung behält OK, Zurück, Home und Wiedergabe/Pause.
  • Zum Eingeben von Text (Disney±Passwort, Suche): Neue Szenenaktion „Text auf einem Roku eingeben“. Du erstellst eine Szene mit deinem Text und startest sie von einer Szenenbox auf dem Dashboard. Achtung, Szenen sind für alle Gladys-Nutzer sichtbar: Für ein sensibles Passwort also vermeiden.
  • Das Anwendungs-Widget zeigt maximal 4 Apps an (Grenze von Gladys). Gib in seinen Einstellungen die Namen ein, die du möchtest (Disney+, KiKA, RTL…), oder füge ein zweites Anwendungs-Widget hinzu, um 4 weitere zu haben. Alle deine Apps bleiben in der „Anwendung“-Funktion des Geräts, nutzbar in Szenen.
  • „Roku Dynamic Menu“ wird jetzt „Home“ angezeigt.

Ein Hinweis zu Replay: Das ist die „Instant Replay“-Taste von Roku, und jede App entscheidet, ob sie sie unterstützt. Bei ZDF macht sie nichts, selbst mit der echten Fernbedienung, nehme ich an. Das ist nicht die Integration :wink:

Das Update wird dir in Gladys angeboten, sobald der Store es gesehen hat, noch heute. Es reicht, die Integration zu aktualisieren, dann das Navigations-Widget hinzuzufügen, wenn du möchtest. Wenn ein Button nach dem Update nicht funktioniert, würde mir ein Screenshot des Netzwerk-Tabs des Browsers (F12) zum Zeitpunkt des Tastendrucks sehr helfen.

Danke für die schnelle Reaktion.

Neue Testrunde:

  • Roku Apps … Verstanden … es gilt: Wer lesen kann ist im Vorteil :wink:

  • Neugestaltung des Dashboards:

Schritt 1:

  • Roku Apps: Auswahl von Arte. geht:

  • TV: Arte wird gestartet, ein Film mit der Vorauswahl « Wiedergabe » ist markiert.
  • Roku Remote: Button Play geklickt… keine Reaktion:

  • Roku Playback: Button Play geklickt… keine Reaktion:

  • Roku Remote: Home geklickt … Startseite des Sticks wird angezeigt.

  • Roku Navigation: Zur App Netflix manövriert… geht

  • Roku Remote: Button « Play » …geht:

die App startet

  • Roku Remote: Button « Play » … geht, die App zeigt ihre nächste Seite aus, hier Profilauswahl

  • Roku Remote: Button « Play » … keine Reaktion

  • Roku Remote: Button « OK » … geht, das in der App voreingestellte Profil geht

  • Roku Navigation: Über Buttons Up , Right ,Right und so weiter einen beliebigen Film ausgewählt

  • Roku Remote: Button « OK » … Film startet

Perfekt…Glückwunsch

Verbesserungsvorschlag vom Tester:

– Widget Roku Navigation in Widget Roku Remote übernehmen, einbinden, anzeigen… dann weiß der Anwender sofort wofür die da sind. Ist ja auf jeder Fernbedienung so.

Grüße und viel viel Lob und Anerkennung für die schnelle Arbeit,

Tom

Nächster Vorschlag vom Tester:

Den Button « Replay » zum jetzigen Zeitpunkt der Entwicklung einfach weglassen, ist App abhängig und führt nur zur Verwirrung, wenn eine App es anbietet und die andere nicht.

Danke Tom, das freut mich :blush: Und danke für deine beiden Vorschläge, der zweite ist bereits in der 1.0.4:

  • Wiederholung aus dem Abspiel-Widget entfernt: Du hast recht, eine Taste, die in einer App funktioniert und in der anderen nicht, verwirrt nur. Das Widget behält Abspielen/Pause, Schnellrücklauf und Schnellvorlauf. Wiederholung bleibt als Gerätetaste und in der Szenenaktion „Taste drücken“ verfügbar, für diejenigen, die sie nutzen.
  • Navigation in der Fernbedienung: Ich hätte es geliebt, aber Gladys begrenzt heute jedes Widget auf 4 Tasten, und eine echte Fernbedienung benötigt mindestens 7 (die 4 Pfeile, OK, Zurück, Start). Daher die beiden Widgets, die übereinander platziert werden sollen. Ich bringe die Idee eines echten Richtungspads in den Widgets bei @pierre-gilles zur Sprache: Es würde allen Fernbedienungs-Integrationen dienen.

Und für die Abspieltaste, die „nichts macht“ bei Arte: Das ist das normale Verhalten von Roku. In den App-Menüs ist OK, der bestätigt (wie du es gefunden hast), und Abspielen/Pause wirkt nur während eines Videos, mehr oder weniger je nach App. Ich habe das in der Dokumentation präzisiert.

Wie gewohnt wird dir das Update vorgeschlagen, sobald der Store es gesehen hat, noch heute. Nochmals danke für diese Top-Tests :folded_hands:

Mache ich gerne. Da aktuell ja die Navigation nicht in die Remote reinkann. Anderer Vorschlag, habe aber keine Ahnung ob das geht oder sinnvoll ist. Kommt so aus dem Bauch:

Die « OK » dient also zur Auswahl der App und in der App bis zum eigentlichen Auswahlmenü des anzuzeigenden Streams / Film.

Warum bis dahin nicht die « Play » ausgrauen?

Grüße
Tom

Gute Idee Tom, ich habe mir das genau angesehen :slightly_smiling_face:

Zwei Dinge blockieren im Moment:

  • Gladys kann noch keine Widget-Schaltfläche grauen : Eine Schaltfläche wird entweder angezeigt oder nicht, es gibt keinen „deaktivierten“ Zustand. Ich füge es zu meiner Liste von Ideen hinzu, die ich @pierre-gilles vorschlagen möchte, zusammen mit dem Richtungsblock.
  • Das Verstecken außerhalb eines Videos wäre riskant : Die Schaltfläche würde davon abhängen, was die App dem Roku mitteilt, und nicht alle Apps melden, dass ein Video läuft. Die Schaltfläche könnte dann mitten im Film verschwinden, was schlimmer wäre als das ursprüngliche Problem :sweat_smile:

Also lasse ich „Wiedergabe/Pause“ sichtbar und die Dokumentation weist jetzt darauf hin, dass in den Menüs OK bestätigt. Wenn Gladys eines Tages lernt, eine Schaltfläche zu grauen, mache ich das gerne !