Ryobi modular smart garage door opener

Ok, here’s what the terminal response is when the refresh button is initiated.

status:undefined:undefined:undefined

Please try running the debuggdoproxy.js file that I put in the GitHub repository. Send me the entire output that is displayed on the console screen when you try and do a refresh. This should output the status again and all device/module information values from the Ryobi API webservice. Once I get this, I’ll be able to get a better idea of what is occurring.

Just tried with the debug version you posted and it’s not really outputting anything extra.
48%20PM

Please double check your device handler settings as something doesn’t appear to be set right. Specifically the api key, door Id, and account info. They are case sensitive. The second console.log I added should have shown all of the device mappings reported by the ryobi api. It should have been a ton of info and shown the door, light, battery, and all of the addon module ports. Also try using the browser method I had posted above with the debug version if all else fails. Do you have the gdo200? I know there was a lower end model without the battery.

Device handler settings are all correct and conform to the correct case sensitivity.

I used the browser method and can send open, close, light on/off, commands and all work correctly. When I send the “status” command it just returns the same undefined response.

Just confirmed, I have the GD200.

Updated the DTH code and the debug proxy code. Please try both and do a status command. Send me the values from the console again. Verify that the email, password, door id, and api key are correct and remove them from the list of values before posting here. If one of those are incorrect, something is being passed incorrectly to the proxy host.

EDIT: Also, on the proxy host, what OS, hardware, and node version are you running?

Please do what I asked in the previous post but also try downloading the debug proxy code again. I cleaned up a ton of the code and took out some of the bad methods I was using to pass parameters to the Ryobi API web service. It’s possible that for whatever reason, the proxy is not calling the HTTPS version of the Ryobi API correctly and that’s what is causing the undefined values. Hopefully the values you send me should show what the issue is.

Thanks again. I’ll try it later today after work and report back.

Ok. Ran both the updated code for proxy and handler. Tested the refresh command via the app and via direct websocket command in browser and both returned the below result. I redacted the password, api, etc, but all the values returned in the terminal match those entered in app.

Also the proxy host is running on Mac OS Sierra, Node Version 8.11.1. (ps also tested on Windows 10 running node 8.11.1 and got the same result)
22%20PM

The issues @projectskydroid reported should be resolved. The issues were caused by a password that contained certain special characters. I’m assuming these characters were syntax characters used by javascript and were causing breakage in the code when they were processed as they were calling the status calls to the Ryobi API to fail. I added some code to the proxy that should account for these characters and properly escape them. I updated both the proxy and DTH to v1.5. The proxy code has been cleaned up and I’ve replaced some of the bad coding methods I originally used. Enjoy!

1 Like

Big thanks again to @madj42! He put a lot of time in putting this together and refining it.

The opener is working great now through smartthings. Wanting to take this a step further, I started comparing some some of the code and variables used in some of the other Garage Door Devices that support routines and smartapp functionality to automate this device. I made a few minor tweaks to madj42 newest version of device handler to so that smartthings and routines recognize this an actual “garage door”. After the adjustments I was able to get this working with RBoys Garage Door Open and Close smartapp. It may work with other routines or smartapps also, but haven’t tested any others.

Feel free to use the adjusted version, tweak it, or ignore it if you don’t really care :wink:

Again, all credit to @madj42, just some slight tweaks…

Thanks for the contributions! I was going to work on that eventually but it’s hard to find the time lately. I updated both the DTH and proxy code on GitHub to include my latest changes I’ve been working on the past few days. Calling this 2.0 as I removed the requirement of using the getinfo.js script to get the apikey and doorid. This will be pulled with each request to the proxy. My initial tests show that it doesn’t add any delays to processing the commands. This should make it easier for everyone to get started with this as that was the one major hurdle I could see.

Enjoy.

Any chance this will make it to Homebridge? I just got our Nest up and running last night and would love to be able to control our Ryobi GDO from the home app as well.

I don’t have any Apple devices myself or use homebridge so I wouldn’t be able to implement that. The guy who originally found the API call methods implemented this in a homebridge environment. I posted a link to his blog above and you may be able to reach out to him to get his setup.

1 Like

Thank you for your reply!

No problem. If you decide to take it on yourself, let me know if there is something I can help with.

@madj42 Thank you for all of you work on this. I use this forum every now and again if I need to get something small done but this is the largest custom SmartThings project I have taken on. I know absolutely nothing about coding or node, actually never heard of it before. I would recommend making a post here or a readme in your GitHub outlining the way you recommend installing this. Maybe even a YouTube video if you can find the time.

Mine works great, took me two hours to figure it all out though. Only thing not showing up is the battery percent, just has lines through it but not a big deal.

I have the RyobiGDOProxy.js start when windows starts using a Windows service. Only issue I have is when my desktop turns on it loads a VPN automatically. The Proxy doesnt work with the VPN for some reason, if I kill the VPN it works right away… Any ideas?

It appears I am wrong, its not updating correctly. I am using the version 2.0. When I run the getinfo.js I actually have to varName… One is my actual email address, one is something similar to g0p77ff958cc. I have tried both but no matter what I do I cant get it to update automatically. If I press the update button it will update, any ideas?

The getinfo.js is no longer needed with 2.0. You only need to enter the email and password in the device handler. Is it with the VPN that it doesn’t refresh automatically or off the VPN? My best guess without knowing your setup is that it’s most likely a VPN that is not allowing split tunneling (turning off local LAN access). I’ve been meaning to do a Readme soon but time is hard with a little one. The other problem I have with doing so is that everyone’s setup will be different and it’s not the same writing up something for Linux versus windows. Regardless, I’ll write up something eventually for a raspberry pi setup as that is what I use.

Alright, I could potentially make a Youtube video showing how I got it set up using Windows one day, I understand the time constraints, have two myself.

I noticed v2 said it was not necessary for the APIKey and DoorID anymore but the DTH still has it set as a required field. I actually changed that to false to let the proxy do the work. No issues should be caused by that correct?

The issue I am still having is delayed or no status updates. If I use the update button and force it, the information updates right away. If however I manually open the garage it can take 5 to 10 minutes to update and thats IF it updates. The updates are not always viewed in the “recently” log in smartthings either. For instance, right now the garage door is closed, the smart things device shows it as closed, but the last update in "recently was when it was opened 45 minutes ago.

1 Like