Plex Media Player Stupid for Neeo but Smart with Harmony

Hi,

i'm running a Plex Media Player on a RPI. My Harmony does communicate thru wifi to control the Plex Player. My RPI does not even have an usb IR input. 

Couldn't you make it work the same way with Neeo ? In the Harmony remote, Plex is recognized as a Roku 3 player (maybe plex emulate a roku api).

I tried to setup a Plex Player or even a Roku 3 device on the Neeo remote but i cannot control my Plex player like the Harmony can.

Reply
19replies Oldest first
  • Oldest first
  • Newest first
  • Active threads
  • Popular
  • We are already working on a way to have Plex integration directly on NEEO. As for the moment, a possibility would be to use our SDK, maybe the available Roku driver works, but I have not tested that. Check out the getting started guide from  Niels de Klerk here .

    Another option would be to get an MCE remote which comes with an IR Receiver, these are usually very cheap and we already have many of them in our database. 

    There are more solutions from Planet NEEO already, this one and this one could be an interesting read for you.

    Like 1
  • I was hoping a basic driver based on the api would be proposed by Neeo (before a more ambitious version). I've already downloaded the sdk. I'll try to make something by myself.

    Like
  • We can surely look into this. I hope you do understand that we have to carefully decide what we prioritize for our limited resources. If you want I can move this over to the idea voting section, by collecting a lot of votes we can sure accelerate that.

    Would be amazing if you could try to do a driver with our SDK. Check the examples, then you should be able to get a basic driver together quickly.

    Like
    • Patrick I do understand 😉 @Andy did already made 2 changes for me. If a full Plex is in the todo list, i agree it's better that the Neeo dev team to focus on that. @Jesper seems  to have already started what i was about to do. Maybe a quick solution for me.

      Like
  • Hey Nicolas Philippe - I'm currently working on the same thing, as I have a similar setup, and the current Plex implementation only allows for IR. 

    I'm basing it on another driver and using the HTTP API on Plex for interacting with the navigation on a single client. Currently it uses some standard Plex API libraries on NPM, with some adjustments - and as such it's presently only running in my own setup, as the adjustments to the 3rd party libraries are not pushed back to the original author yet (I'm working on that tonight) . Anyway, it's located here, if you're interested: https://github.com/jesperrasmussen/neeo-driver-plex

    Like
    • Jesper Rasmussen For sure, i'm going to give a look. Thank you.

      Like
    • Jesper Rasmussen 

      Hello

      I'm also using Plex Media Player on Raspberry Pi and looking for a way to control it with Neeo.

      I've tried your driver but it doesn't work so far.

      I've managed that it connects to the Plex Server but I can't control the Player.

      Do you still working on this driver? Can you please give some more instructions on how to use it?

      Like
    • Nicolas Maier unfortunately Jesper driver seems to be based on a library that does not support latest Plex versions (see https://github.com/phillipj/node-plex-api/issues/86 ) .

      I currently try to work on something but it will take some time. May-be Neeo team will release a driver before i can publish mine :)

      Like
    • Nicolas Philippe Nicolas Maier Hey Nicolas*2 - As mentioned, there has indeed been issues around the npm plex-api module and the connection to newer Plex versions. In my own prototype, I made a patch for this, but unfortunately I didn't quite push those parts into GitHub when I was playing around with the API in the first place - and then Christmas etc. happened ;)

      Anyway, I've modified my remote to use my own patched versions of plex-control and plex-api instead of the publicly available ones from NPM. This means that if you pull the latest version of the remote, you should have it up and running pretty easily.

      Keep in mind though, only basic functionality is working, play/pause/stop and navigation - it's still a prototype :)

      I am working on a few other things though to make use of the Plex API's - I've been toying around with some simple API calls to make a few neat shortcuts, personally I'd like a shortcut which selects a random tv show and plays the next unwatched, available episode for instance. 

      Like
    • Jesper Rasmussen 

      Hello Jesper

      Thank you for the update. I tried it but its still not working for me.

      Do I need to adjust something outside the config.js?

      Connection to Plex is working and I can find the Device in Neeo but I can't control the Plex Media Player.

      I see an error when pressing any button:

       

      Like
  • After changing "console.err" to "console.log":

     

    Like
  • I tested the new release but also got the same error message than @nicolas_maier

    Like
  • That's pretty interesting, I haven't been able to reproduce this on my setup - the response code 500 would indicate a server error on the PLEX HTTP API, which the driver uses for shipping commands to PLEX - but what causes it is hard to reproduce without a similar setup.

    What version of PMS are you running? I'm running 1.11.0.4666 

    Like
  • i updated to use the same version (i was in 1.09...). I use a Linux Server. I still have this error :

     

        Potentially unhandled rejection [2] TypeError: console.err is not a function
    
        at /Users/Nicolas/Downloads/neeo-driver-plex-master/plexApi.js:85:21
    
        at tryCatchReject (/Users/Nicolas/Downloads/neeo-driver-plex-master/node_modules/when/lib/makePromise.js:845:30)
    
        at runContinuation1 (/Users/Nicolas/Downloads/neeo-driver-plex-master/node_modules/when/lib/makePromise.js:804:4)
    
        at Rejected.when (/Users/Nicolas/Downloads/neeo-driver-plex-master/node_modules/when/lib/makePromise.js:625:4)
    
        at Thenable.Pending.run (/Users/Nicolas/Downloads/neeo-driver-plex-master/node_modules/when/lib/makePromise.js:483:13)
    
        at Scheduler._drain (/Users/Nicolas/Downloads/neeo-driver-plex-master/node_modules/when/lib/Scheduler.js:62:19)
    
        at Scheduler.drain (/Users/Nicolas/Downloads/neeo-driver-plex-master/node_modules/when/lib/Scheduler.js:27:9)
    
        at _combinedTickCallback (internal/process/next_tick.js:131:7)
    
        at process._tickCallback (internal/process/next_tick.js:180:9)

    I'll try to give a look inside the code

    Like
  • Nicolas Philippe The console.err missing is my mistake - I used a dependency for node debugging locally, which isn't included in the repo. I've changed it to using the standard console.error included in Node.

    You're more than welcome to looking at the code - It's basically just based on the node-plex-api npm module (though patched for newer PLEX versions). I was looking into the dependency, my best bet would be to add some debugging to node-plex-api/lib/api.js around line 212m which looks like the following:

    if (response.statusCode < 200 || response.statusCode > 299) {
      return reject(
        new Error(
          'Plex Server didnt respond with a valid 2xx status code, response code: ' + response.statusCode
        )
      );
    }

    I would probably try debugging by logging the response object as well as the body returned from PLEX' HTTP API - as that might contain some useful information on what went wrong in the request towards PLEX.

    Like
  • Response Body:

     <?xml version='1.0' encoding='utf-8'?>
    <Response code="2000" status="HTTPError: ">
      <Traceback>Traceback (most recent call last):
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Versions/2/Python/Framework/components/runtime.py", line 843, in handle_request
        result = f(**d)
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/System.bundle/Contents/
    Code/playerservice.py", line 67, in process_legacy_remote_command
        result = cmd(**kwargs)
     File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Versions/2/Python/Framework/code/sandbox.py", line 19, in _apply
        return apply(f, args, kwargs)
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Versions/2/Python/Framework/api/playerkit.py", line 395, in f
        return req.content
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Versions/2/Python/Framework/components/networking.py", line 265, in content
        return self.__str__()
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in __str__
        self.load()
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Versions/2/Python/Framework/components/networking.py", line 181, in load
        f = self._opener.open(req, timeout=self._timeout)
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Platforms/Shared/Libraries/urllib2_new.py", line 444, in open
        response = meth(req, response)
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Platforms/Shared/Libraries/urllib2_new.py", line 557, in http_response
        'http', request, response, code, msg, hdrs)
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Platforms/Shared/Libraries/urllib2_new.py", line 482, in error
        return self._call_chain(*args)
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Platforms/Shared/Libraries/urllib2_new.py", line 416, in _call_chain
        result = func(*args)
      File "/volume1/@appstore/Plex Media Server/Resources/Plug-ins-fc63598ba/Framework.bundle/Conten
    ts/Resources/Platforms/Shared/Libraries/urllib2_new.py", line 565, in http_error_default
        raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    HTTPError: HTTP Error 406: Not Acceptable
    </Traceback>
    </Response>

     

    But no idea what that means. :-(

    Like
    • Nicolas Maier I looked into a few of the errorcodes the API might return, and it seems 406 is used for when the API call is not allowed, either due to the user not being allowed to make the call, or the HTTP API is disabled.

      I notices that it's possible to enable/disable remote control of each client inside the PLEX client's settings. I'm unaware if this is disabled by default (I have probably enabled mine a while ago), but the setting shown here (System -> Services -> Allow remote control via HTTP) might have to be enabled.

      Like
  • Hello Jesper Rasmussen

    I don't have such settings in Plex Media Player.

    The screenshot looks like you're using RasPlex and not Plex Media Player.

    Like
Like1 Follow