IRUSB tiny IR blaster and receiver

Video Storm just released a new USB to IR device that should be a good fit with Home Assistant.

Looking for someone familiar with Home Assistant to help us get the integration in place.

IRUSB already has an open Cloud and Lan/IP API. It also supports Global Cache API (for TX functions).

http://www.video-storm.com/proddetail.asp?prod=irusb

2 Likes

+1 for IRUSB support!

1 Like

I have one of these, and it works great, but still trying to figure out how to get it into home assistant.

This guy has made a webthings integration for it, but I don’t know javascript enough to utilize it.

I managed to do a ‘quick and dirty’ integration with this, and while setting it up is slightly cumbersome it actually works well. Essentially gives you the instantaneous responsiveness you expect from a remote control. I was very dissatisfied with the adb control, even after setting up the /sendevent commands it was still not good.
It is essentially a one-way local push mechanism. It is co-dependent on the androidtv (adb) integration being setup to interact with it as a media_player entity.

Pre-requisites:

  • androidtv integration already setup and in home assistant
  • IRusb and companion app setup/installed on Nvidia Shield (should work on other ATV devices, but not tested)
  • Custom Cards:
  • mini-media-player
  • button-card

Configuration:

In /config/configuration.yaml

# TCP Android Control
shell_command: !include shellcmd.yaml

In /config/shellcmd.yaml

# Need to repeat this for each Shield device you wish to control
# Use Notepad++ or other to 'Replace all':
# YOURROOMHERE = room to identify your shield (can be anything, doesn't need to match HA room name necessarily)
# YOURSHIELDIPHERE = Shield IP address, no quotes necessary, e.g.: 192.168.1.89
poweron_shield_YOURROOMHERE: echo -e "QHIDCODE2000131\r" | nc YOURSHIELDIPHERE 9093
poweroff_shield_YOURROOMHERE: echo -e "QHIDCODE2000130\r" | nc YOURSHIELDIPHERE 9093
powertoggle_shield_YOURROOMHERE: echo -e "QHIDCODE1000102\r" | nc YOURSHIELDIPHERE 9093
volumeup_shield_YOURROOMHERE: echo -e "QHIDCODE2000233\r" | nc YOURSHIELDIPHERE 9093
volumedown_shield_YOURROOMHERE: echo -e "QHIDCODE2000234\r" | nc YOURSHIELDIPHERE 9093
home_shield_YOURROOMHERE: echo -e "QHIDCODE2002035\r" | nc YOURSHIELDIPHERE 9093
play_shield_YOURROOMHERE: echo -e "QHIDCODE2000205\r" | nc YOURSHIELDIPHERE 9093
pause_shield_YOURROOMHERE: echo -e "QHIDCODE2000205\r" | nc YOURSHIELDIPHERE 9093
skipup_shield_YOURROOMHERE: echo -e "QHIDCODE2000181\r" | nc YOURSHIELDIPHERE 9093
skipdown_shield_YOURROOMHERE: echo -e "QHIDCODE2000182\r" | nc YOURSHIELDIPHERE 9093
menu_shield_YOURROOMHERE: echo -e "QHIDCODE2002035\r" | nc YOURSHIELDIPHERE 9093
select_shield_YOURROOMHERE: echo -e "QHIDCODE2000065\r" | nc YOURSHIELDIPHERE 9093
long_select_shield_YOURROOMHERE: echo -e "QHIDCODE6000065\r" | nc YOURSHIELDIPHERE 9093
up_shield_YOURROOMHERE: echo -e "QHIDCODE2000066\r" | nc YOURSHIELDIPHERE 9093
down_shield_YOURROOMHERE: echo -e "QHIDCODE2000067\r" | nc YOURSHIELDIPHERE 9093
left_shield_YOURROOMHERE: echo -e "QHIDCODE2000068\r" | nc YOURSHIELDIPHERE 9093
right_shield_YOURROOMHERE: echo -e "QHIDCODE2000069\r" | nc YOURSHIELDIPHERE 9093
exit_shield_YOURROOMHERE: echo -e "QHIDCODE2000070\r" | nc YOURSHIELDIPHERE 9093
back_shield_YOURROOMHERE: echo -e "QHIDCODE2000070\r" | nc YOURSHIELDIPHERE 9093
0_shield_YOURROOMHERE: echo -e "QHIDCODE1000039\r" | nc YOURSHIELDIPHERE 9093
1_shield_YOURROOMHERE: echo -e "QHIDCODE1000030\r" | nc YOURSHIELDIPHERE 9093
2_shield_YOURROOMHERE: echo -e "QHIDCODE1000031\r" | nc YOURSHIELDIPHERE 9093
3_shield_YOURROOMHERE: echo -e "QHIDCODE1000032\r" | nc YOURSHIELDIPHERE 9093
4_shield_YOURROOMHERE: echo -e "QHIDCODE1000033\r" | nc YOURSHIELDIPHERE 9093
5_shield_YOURROOMHERE: echo -e "QHIDCODE1000034\r" | nc YOURSHIELDIPHERE 9093
6_shield_YOURROOMHERE: echo -e "QHIDCODE1000035\r" | nc YOURSHIELDIPHERE 9093
7_shield_YOURROOMHERE: echo -e "QHIDCODE1000036\r" | nc YOURSHIELDIPHERE 9093
8_shield_YOURROOMHERE: echo -e "QHIDCODE1000037\r" | nc YOURSHIELDIPHERE 9093
9_shield_YOURROOMHERE: echo -e "QHIDCODE1000038\r" | nc YOURSHIELDIPHERE 9093
reset_shield_YOURROOMHERE: echo -e "QHIDCODE2000049\r" | nc YOURSHIELDIPHERE 9093
sleep_shield_YOURROOMHERE: echo -e "QHIDCODE2000050\r" | nc YOURSHIELDIPHERE 9093
channelup_shield_YOURROOMHERE: echo -e "QHIDCODE2000156\r" | nc YOURSHIELDIPHERE 9093
channeldown_shield_YOURROOMHERE: echo -e "QHIDCODE2000157\r" | nc YOURSHIELDIPHERE 9093
ff_shield_YOURROOMHERE: echo -e "QHIDCODE2000179\r" | nc YOURSHIELDIPHERE 9093
rw_shield_YOURROOMHERE: echo -e "QHIDCODE2000180\r" | nc YOURSHIELDIPHERE 9093
skipnext_shield_YOURROOMHERE: echo -e "QHIDCODE2000181\r" | nc YOURSHIELDIPHERE 9093
skipprev_shield_YOURROOMHERE: echo -e "QHIDCODE2000182\r" | nc YOURSHIELDIPHERE 9093
stop_shield_YOURROOMHERE: echo -e "QHIDCODE2000183\r" | nc YOURSHIELDIPHERE 9093
mute_shield_YOURROOMHERE: echo -e "QHIDCODE2000226\r" | nc YOURSHIELDIPHERE 9093
app_plex_shield_YOURROOMHERE: echo -e "QLAUNCH android-app://com.plexapp.android#Intent;component=com.plexapp.android/com.plexapp.plex.activities.SplashActivity;end\r" | nc YOURSHIELDIPHERE 9093
app_tivimate_shield_YOURROOMHERE: echo -e "QLAUNCH android-app://com.plexapp.android#Intent;component=ar.tvplayer.tv/.ui.MainActivity;end\r" | nc YOURSHIELDIPHERE 9093

Save, reboot config.
After reboot under Developer Tools you should now be able to issue the shell commands

shell_command.home_shield_livingroom

Test and confirm working with your shield.

Now at this point you can populate these commands into any remote UI you have setup.
Some of these commands may be redundant or nebulous, I haven’t tested every single one (I pulled these commands from a Savant profile I have used on my system for a few years)

Here at this link, though, is how I have chosen to implement it into a remote card (note you need to create an automation helper: ‘input.boolean.dark_mode’ to control some aspects of the remote. It is also worth noting I don’t use this card in this exact form, but rather as a popup card in a different UI).
You will need to replace the entity names with your entity names if you are going to use it.