Package: py-roku
Screw remotes. Control yourRokuvia Python.Installationpip install py-rokuUsageThe BasicsTo start, import the Roku object and create it with the IP of your Roku.>>> from roku import Roku
>>> roku = Roku('192.168.10.163')The Roku object has a method for each of the buttons on the remote.>>> roku.home()
>>> roku.right()
>>> roku.select()To see a full list of available commands, use thecommandsproperty.>>> roku.commands
['back', 'backspace', 'down', 'enter', 'forward', 'home', 'info', 'left', 'literal', 'play', 'replay', 'reverse', 'right', 'search', 'select', 'up']If you are following along on your home network and are connected to your Roku, you should see it doing stuff.Cool!AppsTheappsproperty will return a list of the applications on your device.>>> roku.apps
[<Application: [2285] Hulu Plus v2.7.6>, <Application: [13] Amazon Instant Video v5.1.3>, <Application: [20445] VEVO v2.0.12092013>]Apps haveid,name, andversionproperties.>>> app = roku.apps[0]
>>> print app.id, app.name, app.version
2285 Hulu Plus 2.7.6You can get an individual app from the Roku object by either itsnameorid.>>> roku['Hulu Plus']
<Application: [2285] Hulu Plus v2.7.6>
>>> roku[2285]
<Application: [2285] Hulu Plus v2.7.6>Seeing the reference to this Hulu Plus app makes me really want to watch the latest episode ofNashville. Let’s launch it!>>> hulu = roku['Hulu Plus']
>>> hulu.launch()Again, if you are following along at home, you should see that your Roku has launched the Hulu Plus app. Want to see the app’s entry in the Channel Store?>>> hulu.store()You can also get the app’s icon.>>> with open('hulu.png', 'w') as f:
...     f.write(hulu.icon)You can get the current running app.>>> roku.active_app
<Application: [12] Netflix v4.2.75015046>Entering TextOkay, I’ve already seen all of the available episodes of Nashville, so I’m going to search forStargate. With the search open and waiting for text entry:>>> roku.literal('stargate')What if I now want to watchThe Informant!? Again, with the search open and waiting for text entry:>>> roku.literal('The Informant!')This will iterate over each character, sending it individually to the Roku.Advanced StuffDiscoveryRoku devices can be discovered usingSSDP. A class method is available on the Roku object that will return Roku object instances for each device found on the same network.>>> Roku.discover()
[<Roku: 192.168.10.163:8060>]It may take a few seconds for a device to be found. You can call discover again or change thetimeoutorretriesparameters on the discover method. This will take longer, but will find more devices.>>> Roku.discover(timeout=10)
[<Roku: 192.168.10.163:8060>, <Roku: 192.168.10.204:8060>]Thanks toDan Krausefor hisSSDP code.SensorsNewer Roku remotes have extra sensors built into them that measure acceleration, orientation, and other things.You can mimic these sensors using the provided helper methods.>>> roku.orientation(1, 1, 1)The parameters to all of the sensor methods are x, y, and z values. Available methods include:acceleration - in each dimension relative to free fall measured in meters/sec^2magnetic - magnetic field strength in microteslaorientation - angular displacement from flat/level and north in radiansrotation - angular rotation rate about each axis using the right hand rule in radians/secTouchSome Roku input devices support touch. The parameters to thetouchmethod are thexandycoordinates of the touch.>>> roku.touch(10, 40)You can change the event triggered by passing an optionalopparameter.>>> roku.touch(10, 40, op='up')Supported events are:downuppress (down and up)movecancelMultitouch is not yet supported in this package.Generic InputBoth the sensor and touch methods rely on the genericinputmethod for sending data to a running application. If you refuse to use covenience methods because they make people lazy and weak, you can call the sensor and touch methods directly.>>> params = {'touch.0.x': 10, 'touch.0.y': 20, 'touch.0.op': 'press'}
>>> roku.input(params)More information about input, touch, and sensors is available in theRoku External Control docs.TODOTests, of course.Multitouch support.A Flask proxy server that can listen to requests and forward them to devices on the local network. Control multiple devices at once, eh?A server that mimics the Roku interface so you can make your own Roku-like stuff.A task runner that will take a set of commands and run them with delays that are appropriate for most devices.