diff --git a/README.md b/README.md
index e885e2c..191246d 100644
--- a/README.md
+++ b/README.md
@@ -1805,6 +1805,97 @@ type: custom:generic-remote-control-card
+
+ Roku Premiere using mqtt call to smart IR blaster (Design and codes by stain3565): (Click to expand!)
+
+ An example of a Roku Premiere remote that sends an mqtt ir code to (in my case) a ZS-06 / Zigbee IR Remote Control / TS1201.
+ I use Zigbee2MQTT in Home Assistant to learn the appropriate ir codes for the remote.
+
+ For flexibilty, this calls a generic script that allows an input_text to be passed, containing the ir code value.
+ This allows simple reuse for other remotes.
+ I have also ensured these ir codes are in the secrets.yaml
+ Example yaml entries are in the yaml folder.
+
+ My example overlays the four generic app buttons with images representing my specific remote buttons.
+
+
+
+```
+type: custom:generic-remote-control-card
+name: Roku Premiere Remote
+remote_template: rokupremiere
+buttons:
+ leftarrow:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_leftarrow_text") }}'
+ home:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_home_text") }}'
+ up:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_up_text") }}'
+ down:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_down_text") }}'
+ left:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_left_text") }}'
+ right:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_right_text") }}'
+ ok:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_ok_text") }}'
+ replay:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_replay_text") }}'
+ asterisk:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_asterisk_text") }}'
+ rewind:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_rewind_text") }}'
+ playpause:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_playpause_text") }}'
+ forward:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_forward_text") }}'
+ netflix:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_netflix_text") }}'
+ googleplay:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_googleplay_text") }}'
+ rakuten:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_rakuten_text") }}'
+ spotify:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_spotify_text") }}'
+
+
+```
+
+
+
+
# Contribution
if you want to add your own remote template, you can do it in a new folder near the 'simple' and 'lg' remotes and
diff --git a/dist/remotes/rokupremiere/README (suggested entry) b/dist/remotes/rokupremiere/README (suggested entry)
new file mode 100644
index 0000000..0de4fb8
--- /dev/null
+++ b/dist/remotes/rokupremiere/README (suggested entry)
@@ -0,0 +1,90 @@
+
+ Roku Premiere using mqtt call to smart IR blaster (Design and codes by stain3565): (Click to expand!)
+
+ An example of a Roku Premiere remote that sends an mqtt ir code to (in my case) a ZS-06 / Zigbee IR Remote Control / TS1201.
+ I use Zigbee2MQTT in Home Assistant to learn the appropriate ir codes for the remote.
+
+ For flexibilty, this calls a generic script that allows an input_text to be passed, containing the ir code value.
+ This allows simple reuse for other remotes.
+ I have also ensured these ir codes are in the secrets.yaml
+ Example yaml entries are in the yaml folder.
+
+ My example overlays the four generic app buttons with images representing my specific remote buttons.
+
+
+
+```
+type: custom:generic-remote-control-card
+name: Roku Premiere Remote
+remote_template: rokupremiere
+buttons:
+ leftarrow:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_leftarrow_text") }}'
+ home:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_home_text") }}'
+ up:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_up_text") }}'
+ down:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_down_text") }}'
+ left:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_left_text") }}'
+ right:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_right_text") }}'
+ ok:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_ok_text") }}'
+ replay:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_replay_text") }}'
+ asterisk:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_asterisk_text") }}'
+ rewind:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_rewind_text") }}'
+ playpause:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_playpause_text") }}'
+ forward:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_forward_text") }}'
+ netflix:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_netflix_text") }}'
+ googleplay:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_googleplay_text") }}'
+ rakuten:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_rakuten_text") }}'
+ spotify:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_spotify_text") }}'
+
+
+```
+
+
+
diff --git a/dist/remotes/rokupremiere/asterisk.png b/dist/remotes/rokupremiere/asterisk.png
new file mode 100644
index 0000000..1f4f6c9
Binary files /dev/null and b/dist/remotes/rokupremiere/asterisk.png differ
diff --git a/dist/remotes/rokupremiere/asterisk_over.png b/dist/remotes/rokupremiere/asterisk_over.png
new file mode 100644
index 0000000..ebdec10
Binary files /dev/null and b/dist/remotes/rokupremiere/asterisk_over.png differ
diff --git a/dist/remotes/rokupremiere/card.txt b/dist/remotes/rokupremiere/card.txt
new file mode 100644
index 0000000..1b5178f
--- /dev/null
+++ b/dist/remotes/rokupremiere/card.txt
@@ -0,0 +1,68 @@
+type: custom:generic-remote-control-card
+name: Roku Premiere Remote
+remote_template: rokupremiere
+buttons:
+ leftarrow:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_leftarrow_text") }}'
+ home:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_home_text") }}'
+ up:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_up_text") }}'
+ down:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_down_text") }}'
+ left:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_left_text") }}'
+ right:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_right_text") }}'
+ ok:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_ok_text") }}'
+ replay:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_replay_text") }}'
+ asterisk:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_asterisk_text") }}'
+ rewind:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_rewind_text") }}'
+ playpause:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_playpause_text") }}'
+ forward:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_forward_text") }}'
+ netflix:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_netflix_text") }}'
+ googleplay:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_googleplay_text") }}'
+ rakuten:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_rakuten_text") }}'
+ spotify:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_spotify_text") }}'
diff --git a/dist/remotes/rokupremiere/down.png b/dist/remotes/rokupremiere/down.png
new file mode 100644
index 0000000..d1852a6
Binary files /dev/null and b/dist/remotes/rokupremiere/down.png differ
diff --git a/dist/remotes/rokupremiere/down_over.png b/dist/remotes/rokupremiere/down_over.png
new file mode 100644
index 0000000..810b107
Binary files /dev/null and b/dist/remotes/rokupremiere/down_over.png differ
diff --git a/dist/remotes/rokupremiere/forward.png b/dist/remotes/rokupremiere/forward.png
new file mode 100644
index 0000000..6ae5d0f
Binary files /dev/null and b/dist/remotes/rokupremiere/forward.png differ
diff --git a/dist/remotes/rokupremiere/forward_over.png b/dist/remotes/rokupremiere/forward_over.png
new file mode 100644
index 0000000..b5ba94b
Binary files /dev/null and b/dist/remotes/rokupremiere/forward_over.png differ
diff --git a/dist/remotes/rokupremiere/googleplay.png b/dist/remotes/rokupremiere/googleplay.png
new file mode 100644
index 0000000..0d7cde6
Binary files /dev/null and b/dist/remotes/rokupremiere/googleplay.png differ
diff --git a/dist/remotes/rokupremiere/googleplay_over.png b/dist/remotes/rokupremiere/googleplay_over.png
new file mode 100644
index 0000000..8ca48d5
Binary files /dev/null and b/dist/remotes/rokupremiere/googleplay_over.png differ
diff --git a/dist/remotes/rokupremiere/home.png b/dist/remotes/rokupremiere/home.png
new file mode 100644
index 0000000..91a8a47
Binary files /dev/null and b/dist/remotes/rokupremiere/home.png differ
diff --git a/dist/remotes/rokupremiere/home_over.png b/dist/remotes/rokupremiere/home_over.png
new file mode 100644
index 0000000..ffb21b5
Binary files /dev/null and b/dist/remotes/rokupremiere/home_over.png differ
diff --git a/dist/remotes/rokupremiere/left.png b/dist/remotes/rokupremiere/left.png
new file mode 100644
index 0000000..dd6e40c
Binary files /dev/null and b/dist/remotes/rokupremiere/left.png differ
diff --git a/dist/remotes/rokupremiere/left_over.png b/dist/remotes/rokupremiere/left_over.png
new file mode 100644
index 0000000..a464c2d
Binary files /dev/null and b/dist/remotes/rokupremiere/left_over.png differ
diff --git a/dist/remotes/rokupremiere/leftarrow.png b/dist/remotes/rokupremiere/leftarrow.png
new file mode 100644
index 0000000..af24495
Binary files /dev/null and b/dist/remotes/rokupremiere/leftarrow.png differ
diff --git a/dist/remotes/rokupremiere/leftarrow_over.png b/dist/remotes/rokupremiere/leftarrow_over.png
new file mode 100644
index 0000000..5f44c63
Binary files /dev/null and b/dist/remotes/rokupremiere/leftarrow_over.png differ
diff --git a/dist/remotes/rokupremiere/netflix.png b/dist/remotes/rokupremiere/netflix.png
new file mode 100644
index 0000000..71d3475
Binary files /dev/null and b/dist/remotes/rokupremiere/netflix.png differ
diff --git a/dist/remotes/rokupremiere/netflix_over.png b/dist/remotes/rokupremiere/netflix_over.png
new file mode 100644
index 0000000..b39fb42
Binary files /dev/null and b/dist/remotes/rokupremiere/netflix_over.png differ
diff --git a/dist/remotes/rokupremiere/ok.png b/dist/remotes/rokupremiere/ok.png
new file mode 100644
index 0000000..8fa302d
Binary files /dev/null and b/dist/remotes/rokupremiere/ok.png differ
diff --git a/dist/remotes/rokupremiere/ok_over.png b/dist/remotes/rokupremiere/ok_over.png
new file mode 100644
index 0000000..e62fbf0
Binary files /dev/null and b/dist/remotes/rokupremiere/ok_over.png differ
diff --git a/dist/remotes/rokupremiere/playpause.png b/dist/remotes/rokupremiere/playpause.png
new file mode 100644
index 0000000..c75f22f
Binary files /dev/null and b/dist/remotes/rokupremiere/playpause.png differ
diff --git a/dist/remotes/rokupremiere/playpause_over.png b/dist/remotes/rokupremiere/playpause_over.png
new file mode 100644
index 0000000..4dd7b07
Binary files /dev/null and b/dist/remotes/rokupremiere/playpause_over.png differ
diff --git a/dist/remotes/rokupremiere/rakuten.png b/dist/remotes/rokupremiere/rakuten.png
new file mode 100644
index 0000000..f2bc6b3
Binary files /dev/null and b/dist/remotes/rokupremiere/rakuten.png differ
diff --git a/dist/remotes/rokupremiere/rakuten_over.png b/dist/remotes/rokupremiere/rakuten_over.png
new file mode 100644
index 0000000..57ed773
Binary files /dev/null and b/dist/remotes/rokupremiere/rakuten_over.png differ
diff --git a/dist/remotes/rokupremiere/remote-html.js b/dist/remotes/rokupremiere/remote-html.js
new file mode 100644
index 0000000..decf41b
--- /dev/null
+++ b/dist/remotes/rokupremiere/remote-html.js
@@ -0,0 +1,288 @@
+function getRemoteStyle_rokupremiere(config) {
+ const template = config.remote_template;
+ const base_url = `/hacsfiles/generic-remote-control-card/remotes/${template}`;
+
+ return `
+ ha-card{
+ background-color:transparent;
+ box-shadow:var(--paper-material-elevation-0_-_box-shadow);
+ }
+ body {
+ margin: 0;
+ padding: 0px;
+ font-family: "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif
+}
+
+.container {
+ width: 242px;
+ margin: 0 auto
+}
+
+#remote-control-rokupremiere {
+ position: relative;
+ background: url(${base_url}/rokupremiere.png?1) no-repeat;
+ width: 242px;
+ height: 720px
+}
+
+#remote-control-rokupremiere ul {
+ margin: 0;
+ padding: 0;
+ list-style-type: none
+}
+
+#forward a,
+#rewind a,
+#playpause a,
+#left a,
+#right a,
+#up a,
+#down a,
+#ok a,
+#asterisk a,
+#rakuten a,
+#spotify a,
+#text a,
+#googleplay a,
+#netflix a,
+#leftarrow a,
+#home a,
+#replay a {
+ position: absolute;
+ display: block
+}
+
+#remote-control-rokupremiere li#rewind a {
+ left: 54px;
+ top: 369px;
+ width: 30px;
+ height: 18px;
+ background: url(${base_url}/rewind.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#forward a {
+ left: 157px;
+ top: 369px;
+ width: 30px;
+ height: 18px;
+ background: url(${base_url}/forward.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#playpause a {
+ left: 109px;
+ top: 370px;
+ width: 24px;
+ height: 18px;
+ background: url(${base_url}/playpause.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#left a {
+ left: 54px;
+ top: 207px;
+ width: 24px;
+ height: 27px;
+ background: url(${base_url}/left.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#right a {
+ left: 157px;
+ top: 207px;
+ width: 24px;
+ height: 27px;
+ background: url(${base_url}/right.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#up a {
+ left: 102px;
+ top: 162px;
+ width: 37px;
+ height: 18px;
+ background: url(${base_url}/up.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#down a {
+ left: 102px;
+ top: 261px;
+ width: 37px;
+ height: 18px;
+ background: url(${base_url}/down.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#ok a {
+ left: 102px;
+ top: 207px;
+ width: 37px;
+ height: 27px;
+ background: url(${base_url}/ok.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#asterisk a {
+ left: 145px;
+ top: 315px;
+ width: 30px;
+ height: 27px;
+ background: url(${base_url}/asterisk.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#rakuten a {
+ left: 48px;
+ top: 483px;
+ width: 64px;
+ height: 33px;
+ background: url(${base_url}/rakuten.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#spotify a {
+ left: 127px;
+ top: 483px;
+ width: 64px;
+ height: 32px;
+ background: url(${base_url}/spotify.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#googleplay a {
+ left: 127px;
+ top: 434px;
+ width: 65px;
+ height: 34px;
+ background: url(${base_url}/googleplay.png?1) no-repeat 0 0px
+}
+
+#remote-control-rokupremiere li#netflix a {
+ left: 48px;
+ top: 434px;
+ width: 64px;
+ height: 34px;
+ background: url(${base_url}/netflix.png?1) no-repeat 0 0px
+}
+
+#remote-control-rokupremiere li#leftarrow a {
+ left: 66px;
+ top: 99px;
+ width: 30px;
+ height: 27px;
+ background: url(${base_url}/leftarrow.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#home a {
+ left: 145px;
+ top: 99px;
+ width: 30px;
+ height: 27px;
+ background: url(${base_url}/home.png?1) no-repeat
+}
+
+#remote-control-rokupremiere li#replay a {
+ left: 67px;
+ top: 315px;
+ width: 30px;
+ height: 27px;
+ background: url(${base_url}/replay.png?1) no-repeat
+}
+
+
+
+#remote-control-rokupremiere li#playpause a:hover {
+ background: url(${base_url}/playpause_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#rewind a:hover {
+ background: url(${base_url}/rewind_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#forward a:hover {
+ background: url(${base_url}/forward_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#left a:hover {
+ background: url(${base_url}/left_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#right a:hover {
+ background: url(${base_url}/right_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#up a:hover {
+ background: url(${base_url}/up_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#down a:hover {
+ background: url(${base_url}/down_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#ok a:hover {
+ background: url(${base_url}/ok_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#asterisk a:hover {
+ background: url(${base_url}/asterisk_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#rakuten a:hover {
+ background: url(${base_url}/rakuten_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#spotify a:hover {
+ background: url(${base_url}/spotify_over.png?1) no-repeat 0px 0px
+}
+
+#remote-control-rokupremiere li#googleplay a:hover {
+ background: url(${base_url}/googleplay_over.png?1) no-repeat 0 0px
+}
+
+#remote-control-rokupremiere li#netflix a:hover {
+ background: url(${base_url}/netflix_over.png?1) no-repeat 0 0px
+}
+
+#remote-control-rokupremiere li#leftarrow a:hover {
+ background: url(${base_url}/leftarrow_over.png?1) no-repeat 0 0px
+}
+
+#remote-control-rokupremiere li#home a:hover {
+ background: url(${base_url}/home_over.png?1) no-repeat 0 0px
+}
+
+#remote-control-rokupremiere li#replay a:hover {
+ background: url(${base_url}/replay_over.png?1) no-repeat 0 0px
+}
+
+#remote-control-rokupremiere li#tv a:hover {
+ background: url(${base_url}/tv_over.png?1) no-repeat 0px 0px
+}
+ `;
+
+}
+
+function getRemoteHtml_rokupremiere(config){
+ const template = config.remote_template;
+ return `
+
+
+
+
${config.name}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+}
diff --git a/dist/remotes/rokupremiere/replay.png b/dist/remotes/rokupremiere/replay.png
new file mode 100644
index 0000000..e76b040
Binary files /dev/null and b/dist/remotes/rokupremiere/replay.png differ
diff --git a/dist/remotes/rokupremiere/replay_over.png b/dist/remotes/rokupremiere/replay_over.png
new file mode 100644
index 0000000..0d8784e
Binary files /dev/null and b/dist/remotes/rokupremiere/replay_over.png differ
diff --git a/dist/remotes/rokupremiere/rewind.png b/dist/remotes/rokupremiere/rewind.png
new file mode 100644
index 0000000..f666c11
Binary files /dev/null and b/dist/remotes/rokupremiere/rewind.png differ
diff --git a/dist/remotes/rokupremiere/rewind_over.png b/dist/remotes/rokupremiere/rewind_over.png
new file mode 100644
index 0000000..105eb1f
Binary files /dev/null and b/dist/remotes/rokupremiere/rewind_over.png differ
diff --git a/dist/remotes/rokupremiere/right.png b/dist/remotes/rokupremiere/right.png
new file mode 100644
index 0000000..5d58164
Binary files /dev/null and b/dist/remotes/rokupremiere/right.png differ
diff --git a/dist/remotes/rokupremiere/right_over.png b/dist/remotes/rokupremiere/right_over.png
new file mode 100644
index 0000000..35d51d8
Binary files /dev/null and b/dist/remotes/rokupremiere/right_over.png differ
diff --git a/dist/remotes/rokupremiere/rokupremiere.png b/dist/remotes/rokupremiere/rokupremiere.png
new file mode 100644
index 0000000..303b012
Binary files /dev/null and b/dist/remotes/rokupremiere/rokupremiere.png differ
diff --git a/dist/remotes/rokupremiere/spotify.png b/dist/remotes/rokupremiere/spotify.png
new file mode 100644
index 0000000..dac5ac8
Binary files /dev/null and b/dist/remotes/rokupremiere/spotify.png differ
diff --git a/dist/remotes/rokupremiere/spotify_over.png b/dist/remotes/rokupremiere/spotify_over.png
new file mode 100644
index 0000000..7d11491
Binary files /dev/null and b/dist/remotes/rokupremiere/spotify_over.png differ
diff --git a/dist/remotes/rokupremiere/up.png b/dist/remotes/rokupremiere/up.png
new file mode 100644
index 0000000..1679dbe
Binary files /dev/null and b/dist/remotes/rokupremiere/up.png differ
diff --git a/dist/remotes/rokupremiere/up_over.png b/dist/remotes/rokupremiere/up_over.png
new file mode 100644
index 0000000..5494d9c
Binary files /dev/null and b/dist/remotes/rokupremiere/up_over.png differ
diff --git a/dist/remotes/rokupremiere/yaml/Living Room Ir Button.yaml b/dist/remotes/rokupremiere/yaml/Living Room Ir Button.yaml
new file mode 100644
index 0000000..8e38fca
--- /dev/null
+++ b/dist/remotes/rokupremiere/yaml/Living Room Ir Button.yaml
@@ -0,0 +1,8 @@
+living_room_ir_button:
+ sequence:
+ - service: mqtt.publish
+ data:
+ topic: zigbee2mqtt/Living Room Zigbee IR Remote Control/set
+ payload_template: '{ "ir_code_to_send": "{{ button_pressed }}" }'
+ alias: Living Room Ir Button
+ mode: single
diff --git a/dist/remotes/rokupremiere/yaml/card.yaml b/dist/remotes/rokupremiere/yaml/card.yaml
new file mode 100644
index 0000000..1b5178f
--- /dev/null
+++ b/dist/remotes/rokupremiere/yaml/card.yaml
@@ -0,0 +1,68 @@
+type: custom:generic-remote-control-card
+name: Roku Premiere Remote
+remote_template: rokupremiere
+buttons:
+ leftarrow:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_leftarrow_text") }}'
+ home:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_home_text") }}'
+ up:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_up_text") }}'
+ down:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_down_text") }}'
+ left:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_left_text") }}'
+ right:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_right_text") }}'
+ ok:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_ok_text") }}'
+ replay:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_replay_text") }}'
+ asterisk:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_asterisk_text") }}'
+ rewind:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_rewind_text") }}'
+ playpause:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_playpause_text") }}'
+ forward:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_forward_text") }}'
+ netflix:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_netflix_text") }}'
+ googleplay:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_googleplay_text") }}'
+ rakuten:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_rakuten_text") }}'
+ spotify:
+ call: script.living_room_ir_button
+ data:
+ button_pressed: '{{ states("input_text.rokupremiere_spotify_text") }}'
diff --git a/dist/remotes/rokupremiere/yaml/input_texts.yaml b/dist/remotes/rokupremiere/yaml/input_texts.yaml
new file mode 100644
index 0000000..a45c3f7
--- /dev/null
+++ b/dist/remotes/rokupremiere/yaml/input_texts.yaml
@@ -0,0 +1,66 @@
+# roku ir codes
+rokupremiere_leftarrow_text:
+ initial: !secret rokupremiere_leftarrow
+ min: 0
+ max: 255
+rokupremiere_home_text:
+ initial: !secret rokupremiere_home
+ min: 0
+ max: 255
+rokupremiere_up_text:
+ initial: !secret rokupremiere_up
+ min: 0
+ max: 255
+rokupremiere_down_text:
+ initial: !secret rokupremiere_down
+ min: 0
+ max: 255
+rokupremiere_left_text:
+ initial: !secret rokupremiere_left
+ min: 0
+ max: 255
+rokupremiere_right_text:
+ initial: !secret rokupremiere_right
+ min: 0
+ max: 255
+rokupremiere_ok_text:
+ initial: !secret rokupremiere_ok
+ min: 0
+ max: 255
+rokupremiere_replay_text:
+ initial: !secret rokupremiere_replay
+ min: 0
+ max: 255
+rokupremiere_asterisk_text:
+ initial: !secret rokupremiere_asterisk
+ min: 0
+ max: 255
+rokupremiere_rewind_text:
+ initial: !secret rokupremiere_rewind
+ min: 0
+ max: 255
+rokupremiere_playpause_text:
+ initial: !secret rokupremiere_playpause
+ min: 0
+ max: 255
+rokupremiere_forward_text:
+ initial: !secret rokupremiere_forward
+ min: 0
+ max: 255
+rokupremiere_netflix_text:
+ initial: !secret rokupremiere_netflix
+ min: 0
+ max: 255
+rokupremiere_googleplay_text:
+ initial: !secret rokupremiere_googleplay
+ min: 0
+ max: 255
+rokupremiere_rakuten_text:
+ initial: !secret rokupremiere_rakuten
+ min: 0
+ max: 255
+rokupremiere_spotify_text:
+ initial: !secret rokupremiere_spotify
+ min: 0
+ max: 255
+
diff --git a/dist/remotes/rokupremiere/yaml/secrets.yaml b/dist/remotes/rokupremiere/yaml/secrets.yaml
new file mode 100644
index 0000000..08c2175
--- /dev/null
+++ b/dist/remotes/rokupremiere/yaml/secrets.yaml
@@ -0,0 +1,17 @@
+# roku premiere
+rokupremiere_leftarrow: BWojthE3AkABA5wGNwJAAeADB0ALQANAAcAH4AMBQBNAA0ABQAdAA8ABQAtAA0ABwAdAAUALQAMLNwI3AjcCNwKcBjcC
+rokupremiere_home: BXYjuhE6AkABA5IGOgJAAeADB0ALQANAAcAH4AMBQBPgAwPgFwHgAyvgAwsBg57gWYdAb8ABQAvgBwMDOgI6Ag==
+rokupremiere_up: DkYjnxEWAhYCWQJnBlkCFiABgAcBWQJAB8ADwA9AB+ADA4AfABZgBwEWAkADBBYCZwZZYAMAFmABQAeAA+ABFwFZAkADwA9ABwGknUCHAVkCwBfgBwdAI0AD4AMXQAvAA0AbwAPgBxPgAw9AC+AQJwICWQI=
+rokupremiere_down: DXcjWRFvAvgBbwJPBm8C4AcHQBNAA+ADF0ALwANAG+ADA+AHF8APwAfAK+AHDwGKneBZh0B74Ad34AMPA/gBbwI=
+rokupremiere_left: BXcjvxE4AkABA5cGOAJAAeADB0ALQANAAcAH4AMBQBNAA0ABQAfgAwPgAwFAF+AHAUATwAMBfp7gWYfAa+AHAQuXBjgClwY4AjgCOAI=
+rokupremiere_right: BZgjpBE/AkABA34GPwJAAeADB0ALQAMDPwJfAoAH4AUBQBPAA0AB4AcL4AMBQBvAAQR+Bl8CPyABAX4GgAMBeZ7AhwFfAkATQAHgAQeAE0AHAD8gAQN+Bj8C4AcBQBPAAwM/Al8C4AELAT8CQAtAAeAHB0AB4AQTAgI/Ag==
+rokupremiere_ok: BXAjwxE4AkABA5gGOAJAAeADB0ALQANAAcAH4AMBQBNAA0AB4A8HQAHgDxtAF0ADAZue4FmHQGdAA0AB4AwHAgI4Ag==
+rokupremiere_replay: BXMjxhE7AkABA5AGOwJAAeADB0ALQANAAcAH4AMBQBNAA+ADAUAP4AMDQAHgBw/gAwFAGwGmnuBZh0Bn4AMD4AgBAgI7Ag==
+rokupremiere_asterisk: BVwjuxE4AkABA5MGOAJAAeADB0ALQANAAcAHBDgCXwI4oAFAE8AD4AcB4AcXwA/AB8ABQA8Bg57gO4cFXwKTBjgC4AEBAl8COCABQBPAA0ABwAvABws4AjgCOAI4AjgCOAI=
+rokupremiere_rewind: BW8jzRE4AkABA5cGOAJAAeADB0ALQANAAcAH4AMBQBNAA8ABwAtAB0ADwAFAC0ADQAHAB0ABQAtAAwGRnuBZh0BnwANAAUALwAEHlwY4AjgCOAI=
+rokupremiere_playpause: BYEjpxE8AkABA4kGPAJAAeADB0ALQANAAQSJBmECPOAGAQGJBoADwAGAD+ABJwOJBjwCQAFAB0ADwAFAC0ADQAFABwGSnuBLhwE8AsABQAvgAwPAAYAT4AGv4CWHATwC4AcBQBNAA8ABQAtAA8ABQAvgAwPAAcATBzwCPAI8AjwC
+rokupremiere_forward: DXUjqRFiAjsCYgKMBjsCQAHgAwdAC0ADQAHAB+ADAUATwANAAUALATsC4AlLQAGAGwE7AuALBwGFnkCHATsCQAHgCx9AE0ADQAHAB+ADAUATwANAAUALQAHgAwfgAwtAAeAHDwM7AjsC
+rokupremiere_netflix: BZAjmhE6AkABA5IGOgJAAeADB0ALQANAAcAH4AMBQBPgAwNAAUAPwAHgAwtAAcAPQAdAA0ABQAcBh57gWYdAZ8ABwAtABwuSBjoCOgI6AjoCOgI=
+rokupremiere_googleplay: DU8jkhFiAgoCYgJjBmIC4AcHQBNAA+ADF0ALwANAG8ADwBPgAwdAG8APQAvgBwNAG0ATAZud4AOHAQoCQAEHYwZiAgoCYgJABwJjBgogAwViAgoCYgLAB0ALwAMCYwYKIANABwNiAgoC4AkDQBdAA0AbQAfgAQMACmALBwoCYgIKAmIC
+rokupremiere_rakuten: DZUjjBFZAiUCWQJ9BlkC4AcHQBNAA+ABF0ABgA9AB0Ab4AcDQBdAA8AXQAvgAwPgBxdADwF7nuAnhwFZAoADQAEEWQJ9BiUgA0AH4AEDACVgAQFZAoATACUgBwElAoABAlkCJSABQA9AAwslAiUCJQIlAiUCJQI=
+rokupremiere_spotify: BYcjuxE7AkABA48GOwJAAeADB0ALQANAAcAH4AMBQBPAA+ADAUATQAHAB0ABQAvAA0ABQAtAAUAHAY+e4FmHAI/gAt9AC0ADQAELjwY7AjsCOwI7AjsC
diff --git a/dist/rokupremiere.png b/dist/rokupremiere.png
new file mode 100644
index 0000000..2b46a99
Binary files /dev/null and b/dist/rokupremiere.png differ
diff --git a/rokupremiere.png b/rokupremiere.png
new file mode 100644
index 0000000..303b012
Binary files /dev/null and b/rokupremiere.png differ