Originally Posted by pjp
It's in Roku's financial interest that Harmony works well with their devices because Harmony is an enabler of Roku sales when it works and is a determent to Roku sales if it doesn't. These types of "cooperation" decisions in business always come down to "follow the money". Harmony and Roku don't compete at all and Roku is better off with Harmony working well, so Roku has every motivation in the world to provide the best API they can. I very much doubt that Harmony needs to reverse engineer anything. Obviously, nobody knows without API details from Roku/Harmony, but it would be against business logic for Roku not to make the API available.
I suspect that it is a Harmony problem because the Harmony iPhone app seems to work just fine with Roku IP control. I say "seems to" because I haven't used the iPhone app all that much -- but the iPhone app continues controlling the Roku when the Harmony remote freezes on Roku control. I also haven't seen any double clicks with the app. Both the App and remote use the same Roku API, so my guess is that the fault lies with Harmony's communication between the remote and hub.
I didn't say it wasn't harmony's problem. what I was getting at is that Roku has a much better chance at controlling their own equipment with their own apps than third parties, given that they know the interface intimately. I've had problems with google controlling a roku tv as well. most of the time it works. sometimes it doesn't. I don't like that you can't easily force devices to use only IP if it's available, though. that's all on them for not providing that.
ROKU uses a RESTful API. I have programmed RESTful APIs before. Sometimes they're great/simple. sometimes things don't work right. What I have seen that often causes with REST interfaces is that the network the client system is on can sometimes drop, block (basically eat) rest commands. they're often latent end to end, especially depending on size of the command.
just for fun, here's an example of a ROKU command and response to query currently active tv channels: (note, pulled from their documentation)
$ curl 'http://192.168.1.134:8060/query/tv-active-channel'
<program-description>The team will travel all around the world in order to shut down a global crime ring.</program-description>
Yes, harmony can do better with handling issues with the ROKU api. without trying to interface with the ROKU myself, I don't know what types of difficulties there are within the API. I will note that I loathe xml/human readable APIs. binary is always more efficient and easier to parse for a good programmer. Protobuf/GRPC is much more efficient and easier to deal with.