lprhodes / homebridge-apple-tv

Apple TV 4th & 5th gen plugin for homebridge: https://github.com/nfarina/homebridge
Apache License 2.0
105 stars 15 forks source link

send a command "hold button" #37

Open sadden3194 opened 5 years ago

sadden3194 commented 5 years ago

hello :)

is there a way to send a button which is hold 4 seconds?

"command": [
    {
      "command": "tv_menu",
    }
  ]
bradskeds commented 5 years ago

Also updated Issue #34 with the below:

I'm not a node.js developer, and this is not the correct place to fix it, I think it should properly be fixed in the node-appletv package and not homebridge-apple-tv package. However, I tested an update to homebridge-apple-tv/helpers/sendCommand.js

case "hold_menu": return device.sendKeyPress(1, 0x86, true);
return setTimeout(device.sendKeyPress(1, 0x86, true), 3000);

this uses the sendKeyPress from the node-appletv project directly, and allows you to set a timeout on the value. You can modify this for any button, but the above is for the menu button.

The proper place to fix it would be to create a new function in node-appletv to create a copy of sendKeyPressAndRelease and make a new function such as sendKeyPressHoldAndRelease that adds a delay between the press and release of the command in node-appletv.

But, just making the code change above seemed to work for my limited use. I'd like to get a proper fix into a pull request to add to node-appletv. But, i don't have time to do so as this is just a hobby project. But, I wanted to add here in case it was helpful.

bradskeds commented 5 years ago

Actually the line should be return setTimeout(device.sendKeyPress(1, 0x86, false), 3000); not return setTimeout(device.sendKeyPress(1, 0x86, true), 3000); but it didn't seem to matter much in my testing.