Universal Remote Card - Buttons, Touchpads, Sliders, and Keyboards for Multiple Platforms

Hello,
Is there a way to get a button to autofocus a projector?
I use a Xgimi Halo+ and to autofocus it there is a button on the side of the remote. I dont know how to get the command from ADB.

Are you sure that this remote command is being done through Android? It may be proprietary to the Xgimi Halo+. This Xgimi custom integration says it supports the Halo+ and autofocus, I’d try using it instead of ADB.

This project is now on HACS! :tada:

I’ve released v3.0.0, which is another big refactor that improves stability and makes it easier to make future improvements on this project.

This release also breaks many card-mod configs as it places all buttons, sliders, and touchpads inside shadow roots. I’ve added button_style, touchpad_style, and slider_style options to help mitigate this. style fields can also be placed in custom keys and sources to modify individual buttons.

1 Like

Great work! really nice update on an already great card!

I was wondering when it says “Touchpad haptics can now be disabled separately from buttons” how this could be done? I tried:

enable_touchpad_feedback: false

but this wasn’t it. Thanks!

Yikes, it looks like all of the haptic toggles don’t work anymore. I’ll work on fixing it now.

Edit: Should be fixed in v3.0.3

2 Likes

Great card! Thank you

I’m trying to use the touchpad single click to open a web page/url

with other cards, I simply use :

tap_action:
  action: url
  url_path: https:www.google.com

how can I make it work?
are the actions limited to services?
I’ve tried shell_command / rest_command unsuccessfully

looking for something like this :

custom_keys:
  center:
    action: url
    url_path: https:www.google.com

Thanks!

Actions are limited to services. If you want you can make a feature request on the GitHub page and I can look into it when I have time.

Done :crossed_fingers: thank you!

Use case fyi:

Was using buttons to flip through RSS news headlines.
Instead I’ve overlaid a transparent version of your touchpad on the news card and can now flip through hedlines by swiping left-right. Great!
However I lost the ability to open the link to the full news article by single-clicking on the headline

Thanks for considering this enhancement request,

Cheers.

Hi, the volume buttons are sort of inverted from what seems to be intuitively convenient, ie vol - is on top and vol + is at the bottom. Any way I can invert this without assigning the vol + command to the vol - button and vice versa?

Secondly, is it possible to have some now playing type info showing on the touchpad rather than an image, if thats not too much to ask

Can you make a bug for this on the repo so I can remember to reverse the volume buttons order when in a column when I come back from out of town?

1 Like

@Nerwyn, great job on this card! Thank you for all the work on this, it works great.

1 Like

Yeah its too awesome, I have such a fantastic remote working for all my sources now.

@Nerwyn , is it possible to use keyboard with apple tv? Not managed that yet.

Unfortunately I don’t think there is. I don’t see a way to do so in the Apple TV Home Assistant integration.
According to this thread, the underlying library does support sending text, so it would be possible if this functionality was implemented into the Home Assistant integration.

1 Like

I dont get the icons for nlziet kodi and jellyfin.
how can I get those?

You’d have to add custom svg icons for them as described here. You could also use CSS to instead use an image as described here.

This card is great but i’m strugling adding a custom_source of any app installed on my Android TV, in this case SmartTube

I thought that app_id should be used com.liskovsoft.smarttubetv.beta but it doesn’t seem to work. Also looked for a source in dev tools but it doesn’t give me any hints.

Do you have an example on how to add a custom_source for any app installed on my Philips Android TV?

For Smartube I’m using the card default YouTube source vnd.youtube://. It does throw an error message at the bottom of the screen saying it can’t process the intent but it works anyway. Have you tried any of the alternates for YouTube or Smartube in the Android TV deep linking guide??

As for examples there a section in the README in custom keys and sources that has this example:

custom_sources:
  max:
    icon: hbo
    source: hbomax://deeplink

With source being found using the deep linking guide.

1 Like

Thanks for your reply, i missed the deep link part my apologies.

1 Like

I’ve just released v3.1.0, which adds jinja2-like templating using nunjucks.

Because this uses nunjucks to recreate Home Assistant templating, I have to reimplement some of its functions as described in the Home Assistant templating documentation. So far the following functions are implemented:

  • states
  • is_state
  • state_attr
  • is_state_attr
  • has_value
  • iif
  • match_media

Here’s some examples of using templates with this card:

rows:
  - - '{{ "navigation_buttons" if match_media("(orientation: landscape)") else "navigation_touchpad" }}'
  - - '{{ "sunroom_light" if is_state("light.sunroom_ceiling", "off") else "volume_slider" }}'
custom_keys:
  sunroom_light:
    icon: >-
      {{ iif(is_state("light.sunroom_ceiling", "on"), "mdi:ceiling-light",
      "mdi:ceiling-light-outline") }}
    service: light.toggle
    data:
      entity_id: light.sunroom_ceiling
    style:
      color: |
        {% if is_state("light.sunroom_ceiling", "on") %}
        rgb({{ state_attr("light.sunroom_ceiling", "rgb_color") }})
        {% endif %}

Note: You still need to use VALUE for slider service call data.

2 Likes

Hi @Nerwyn, thanks a lot for your amazing card, works like a charm!

Here my custom config for a Samsung SmartTV, integrated with HA using ha-samsungtv-smart (GitHub - ollo69/ha-samsungtv-smart: 📺 Home Assistant SamsungTV Smart Component with simplified SmartThings API Support configurable from User Interface.).

Hope it can help other using this amazing card!

type: custom:android-tv-card
media_player_id: media_player.samsung_tv_75_salotto_ci
custom_icons:
  dazn: >-
    m14.774 8.291.772-2.596.79 2.596zm3.848
    2.268-2.025-6.128c-.045-.135-.097-.224-.154-.266a.497.497 0 0
    0-.28-.063h-1.12a.485.485 0 0 0-.284.068c-.06.045-.11.132-.149.261l-2.045
    6.128c-.025.032-.038.096-.038.192 0 .149.09.223.27.223h.84c.076 0
    .139-.003.187-.01a.207.207 0 0 0 .116-.048.326.326 0 0 0
    .077-.116c.022-.051.046-.119.072-.202l.318-1.071h2.306l.327
    1.051c.026.09.051.16.077.213a.395.395 0 0 0
    .087.12c.031.028.07.047.114.053h.002c.045.006.103.01.173.01h.897c.18 0
    .27-.074.27-.223a.59.59 0 0 0-.005-.09.878.878 0 0
    0-.036-.108l.003.006zm-.994 2.467h-.646c-.168
    0-.279.024-.333.072-.055.049-.082.147-.082.295v3.638l-1.91-3.647c-.076-.155-.152-.253-.226-.295-.074-.041-.204-.063-.39-.063h-.599c-.167
    0-.278.025-.332.073-.055.048-.082.147-.082.294v6.138c0
    .148.025.246.077.294.052.048.16.072.328.072h.656c.167 0
    .278-.024.332-.072.055-.048.082-.146.082-.294v-3.648l1.91
    3.657c.077.155.152.253.227.295.073.042.204.062.39.062h.598c.167 0
    .278-.024.333-.072.054-.048.082-.146.082-.294v-6.138c0-.148-.028-.246-.082-.294-.055-.048-.166-.073-.333-.073zm3.203-.581
    1.665 1.665v8.385H1.505V14.11l1.663-1.664a.63.63 0 0 0 0-.89L1.504
    9.891V1.505h20.991v8.384l-1.665 1.666a.63.63 0 0 0 0 .89zM24
    0H0v10.613L1.387 12 0 13.387V24h24V13.387L22.613 12 24 10.613zM10.67
    18.469H7.96l2.855-4.014a.67.67 0 0 0 .087-.155.425.425 0 0 0
    .019-.135v-.772c0-.148-.028-.246-.082-.294-.055-.048-.166-.073-.334-.073H6.382c-.149
    0-.245.028-.29.082-.045.055-.068.169-.068.343v.58c0
    .172.023.287.068.341.045.055.141.083.29.083h2.545L6.11 18.469a.438.438 0 0
    0-.107.27v.792c0 .148.027.245.082.294.055.048.167.072.334.072h4.25c.148 0
    .245-.027.29-.081.045-.055.068-.17.068-.344v-.579c0-.173-.023-.287-.068-.342-.045-.055-.142-.082-.29-.082zM9.408
    8.233c0 .264-.017.484-.052.661a1.08 1.08 0 0 1-.174.43.648.648 0 0
    1-.318.231 1.523 1.523 0 0 1-.487.068h-.79v-4.17h.79c.366 0
    .63.11.79.324.16.215.241.571.241
    1.067v1.389zm1.38-2.789c-.225-.457-.533-.795-.921-1.013-.39-.219-.88-.328-1.47-.328H6.418c-.167
    0-.278.024-.333.072-.054.049-.082.147-.082.294v6.138c0
    .148.028.246.082.295.055.048.166.072.333.072h2.218c1.048 0 1.765-.447
    2.15-1.342.09-.205.153-.413.188-.622a4.91 4.91 0 0 0
    .054-.796V6.911c0-.367-.018-.656-.054-.868a2.2 2.2 0 0 0-.193-.612l.006.013z
custom_keys:
  '0':
    icon: mdi:numeric-0
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_0
  '1':
    icon: mdi:numeric-1
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_1
  '2':
    icon: mdi:numeric-2
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_2
  '3':
    icon: mdi:numeric-3
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_3
  '4':
    icon: mdi:numeric-4
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_4
  '5':
    icon: mdi:numeric-5
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_5
  '6':
    icon: mdi:numeric-6
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_6
  '7':
    icon: mdi:numeric-7
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_7
  '8':
    icon: mdi:numeric-8
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_8
  '9':
    icon: mdi:numeric-9
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_9
  up:
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_UP
  down:
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_DOWN
  left:
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_LEFT
  right:
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_RIGHT
  center:
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_ENTER
  power:
    icon: mdi:power
    service: media_player.toggle
    target:
      entity_id: media_player.samsung_tv_75_salotto_ci
  home:
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_HOME
  back:
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_RETURN
  volume_mute:
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_MUTE
  ch_up:
    icon: mdi:arrow-up-bold
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_CHUP
  ch_down:
    icon: mdi:arrow-down-bold
    service: media_player.play_media
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      media_content_type: send_key
      media_content_id: KEY_CHDOWN
  DAZN:
    icon: dazn
    service: media_player.select_source
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      source: DAZN
  netflix:
    icon: mdi:netflix
    service: media_player.select_source
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      source: Netflix
  youtube:
    icon: mdi:youtube
    service: media_player.select_source
    data:
      entity_id: media_player.samsung_tv_75_salotto_ci
      source: YouTube
  light_off:
    icon: mdi:lightbulb-group-off
    service: light.turn_off
    target:
      entity_id: light.all_lights
  light_on:
    icon: mdi:lightbulb
    service: light.turn_on
    target:
      entity_id: light.soggiorno
rows:
  - - power
    - null
    - volume_mute
    - null
    - light_on
    - light_off
  - - volume_slider
  - - null
  - - ch_up
    - ch_down
  - - null
  - - netflix
    - youtube
    - DAZN
    - primevideo
    - spotify
  - - navigation_touchpad
  - - back
    - home
  - - 1
    - 2
    - 3
    - 4
    - 5
  - - 6
    - 7
    - 8
    - 9
    - 0

1 Like