Ryobi modular smart garage door opener

Happy to reverse engineer it if someone would buy me one :smiley: 2HP is an overkill for the garage door I have, but the modularity of it is pretty cool.

Anyone had any luck with this? Iā€™m looking at getting a couple :slight_smile:

Anyone look further into API on this?

Found this today. Iā€™m a newbie when it comes to smartthings and I might try and look into this more. If anyone else has experience with making device handlers, have at it.

2 Likes

I wrote a node.js proxy service for sending requests to the GDO. Forgive the messy code as this is the first time Iā€™ve written anything in javascript/node.js. Youā€™ll need to find your garage door id and api key. This is the hardest part of getting this to work. I used an old rooted Nexus 4 I had, the Xposed framework, SSLUnpinning 2.0, and the package capture app from the Play store. I was able to look at the capture files and get these values. The service looks for 4 parameters: email, apikey, name, and doorid. Most of them are self explanatory except for Name. Name has 4 values: lighton, lightoff, dooropen, and doorclose. I havenā€™t figured out how to get the status of the garage door and light. Next up Iā€™ll take a stab at a device handler.

1 Like

Iā€™ve cleaned up the old posts and replaced it with this singular post.

Here is the new GitHub repo: https://github.com/Madj42/RyobiGDO

This includes the same code as before with some minor tweaks. I toyed with the idea of having the node proxy service get the apikey and doorid values automatically but I most likely will not have time to finish this. This was kind of my last project to complete before my wife goes into labor. For now, you can use the GetInfo.js file to get the values. Edit the GetInfo.js file, input your username/password in the variables, and run it with node. The Door ID is varName and the authkey is authKey. Plug those values into the DTH and everything should work.

Good luck!

1 Like

Made one more modification to pull in the battery status for the GDO200 model. Iā€™m pretty happy with how this turned out after this modification. After this (if I find the time) Iā€™ll most likely focus on cleaning up some of the code and other things.

3 Likes

Do you have to have your phone rooted to capture those packets?

Amazing! Youā€™re basically making this more and more likely my next choice for a garage door opener!

You do have to have the phone rooted as it requires the SSLUnpinning app from xposed. Use the getinfo File I uploaded to get the details without having to root your phone. Iā€™m going to be Mia for a while since my daughter was born this past Tuesday. As you can imagine, she is taking up all my time. :blush:

Thank you. One thing to note though is that it can be hard to get the garage door opener at a store due to a patent lawsuit with Chamberlain. Itā€™s a great garage door opener and Iā€™ve had very little issues with it. The keypad leaves something to be desired but the phone app makes up for that. See if you can find it on kbid or some other auction site as I got mine for around $125.

1 Like

Great work on this! Thanks so much, have been waiting for over a year for someone to put something like this together.
The Getinfo script worked perfectly, and Iā€™ve got the proxy and device handler working and successfully operating the light and door. The only issue Iā€™m having is the status refreshing correctly from opening to open or from closing to closed. Pressing the refresh does nothing. Iā€™m also seeing a correlating error in the proxyā€™s console saying ā€œCannnot read property ā€œgarageLight_7ā€ of undefinedā€.
Is anyone else having this issue or seeing this error.

Yeah I need to do some more work on this as mine stopped working as well. I plan on doing some digging into the issues as soon as I have some time. Perhaps tomorrow while the wife is out with the kid. Iā€™ll post a new version when I have something. Thanks for the post and glad itā€™s semi working for you. :grin:

1 Like

@projectskydroid

My daughter decided to sleep long enough for me to get this figured out. The status was not working due to the Device Network Id value in the actual device properties in the IDE. This needs to be set to the IPofNodeJSHost:Port that is converted to hexidecimal. Iā€™ve added some code to the device handler that will periodically set this automatically for you. Update the device handler and it should take care of that issue. The other issue was the _7 on the values for the battery, light, and door status. I figured not everyone would have an _7 in the name for these properties so I added some code to find the actual names your door uses and pulls those values. Iā€™ve also turned off a lot of the debug messaging I had going to the ST logs. This should help clean things up in the logs.

Let me know how this works. Hopefully it helps.

Thanks for looking into it. I update the code on the server and device handler, but now I get noresponse from any of the commands in the app. They just toggle back and forth from on to off, or open to close etc, but no response from garage opener.

Thereā€™s no error messages being returned in the server console though.

I verified that your code did generate a new network ID like you discussed. Iā€™m curious if this might be the issue. I verified the port is the correct hex for port 3042, but the IPofNodeJSHost section doesnā€™t look like any IP Iā€™ve ever seen. What is this IP pulling from, my internal IP address where the proxy is running, or TwiConnect? Wondering if this might be the problem.

The ip address is the internal ip value you set in the device handler options that has been converted to hex. This should be the node proxy hosts ip. If you uncomment the console.log(request.url) line in the node code, does that them show requests going to the proxy? If not, I would check the internal ip value. Also, uncheck the log.debug lines in the parse section of the device handler code. Those might help in debugging if itā€™s a dth issue.

1 Like

Ok. I see how it converts it, and that does show the internal IP for the server. I uncommented the console.log section though and it still isnā€™t displaying any requests.

Are you looking at the terminal output after starting the node proxy? It should show the URL output of the request when initiate some sort of command. Regardless of what the device network id is set to, it should send requests to the proxy. If you browse to the ip address and port of the node proxy in a browser, does it output anything in the browser?

Yep, Iā€™m looking in the terminal window that the node proxy is running in. The only output is the initial ā€œserver is listening on 3042ā€.

I left it running for most of the morning while I was running around and the only additional messages that it displayed were a couple ā€œfavicon.icoā€ (not sure what thatā€™s about". If Iā€™m connected to the local network and try and send an open/close, or light on/off command, nothing shows up.

I also navigated to the proxyā€™s ip and port using chrome and was able to access a ā€œsiteā€. It just displays a single line of text reading ā€œNot valid command!ā€, on the website.

There is some sort of disconnect with the hub and the proxy host. The traffic passed is essentially web traffic with a few parameters. Try going to this in a browser:

Http://ipofproxy:port/?name=dooropen&doorid=${doorid}&apikey=${apikey}&email=${email}&pass=${pass}

Replace the variables with their values from the device handler settings and be sure to take out the ${} too. That should open your garage door. That will verify that the proxy service is working correctly. If that works then we know itā€™s something to do with the hub or device handler. Let me know the results and if need be Iā€™ll see if there is something that could help debug the device handler.

1 Like