Ryobi modular smart garage door opener

My garage has 2 Ryobi GDOs. Is there a way in the DTH to select which door to control?

I had been running them in Home Assistant, but recently the module has broken and nobody can figure out how to fix the code. @madj42 Thanks for your work.

I wound up creating a 2nd GDOProxy on port 3043 for door#2. I modified one line in the GDOProxy2.js to var doorid = someValue.result[2].varName. I did not have to modify the Api key. Now I have 2 working doors.

Glad you got it working. I was going to recommend the exact thing you ended up doing. Thanks for sharing that it worked too.

@DEANE is there something that isnā€™t working currently? I donā€™t have the new app and most likely wonā€™t be switching unless Iā€™m forced to due to time.

Sorry for the delay, if you are still having issues with a delay, there are some debug logging lines in the DTH code. Iā€™m wondering if you uncomment these in the light routines, is there a delay before they show up in the logs in the developer IDE console? That should help rule out the smartthings end if itā€™s quick to show in the logs. I doubt this would show any sort of delay. If itā€™s quick, itā€™s most likely something to do with the connection between your hub and the pi. Try completely removing the DTH from the IDE console and publishing it again.

@madj42 yes, the new app doesnā€™t work at all. It just says canā€™t communicate with device. I actually started looking into the code and was making progress to get it working but other priorities have taken over for the moment. Hopefully Iā€™ll be able to get back to it soon.

Everything was working fine and dandy but about a week ago it just stopped working and I have no idea where to look first.

When looking at that service status I do see the following though

trent@h-maherutility:~$ sudo service GDOProxy status

ā— GDOProxy.service - Ryobi GDO Proxy Service
Loaded: loaded (/etc/systemd/system/GDOProxy.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-11-10 06:57:31 CST; 2s ago
Main PID: 27530 (node)
CGroup: /system.slice/GDOProxy.service
ā””ā”€27530 /usr/bin/node RyobiGDOProxy.js

Nov 10 06:57:31 h-maherutility systemd[1]: Started Ryobi GDO Proxy Service.
Nov 10 06:57:31 h-maherutility node[27530]: server is listening on 3042
Nov 10 06:57:34 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™
trent@h-maherutility:~$ sudo service GDOProxy status
ā— GDOProxy.service - Ryobi GDO Proxy Service
Loaded: loaded (/etc/systemd/system/GDOProxy.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-11-10 06:57:31 CST; 1min 1s ago
Main PID: 27530 (node)
CGroup: /system.slice/GDOProxy.service
ā””ā”€27530 /usr/bin/node RyobiGDOProxy.js

Nov 10 06:58:13 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™
Nov 10 06:58:16 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™
Nov 10 06:58:16 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™
Nov 10 06:58:16 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™
Nov 10 06:58:18 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™
Nov 10 06:58:18 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™
Nov 10 06:58:21 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™
Nov 10 06:58:21 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™
Nov 10 06:58:21 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™
Nov 10 06:58:23 h-maherutility systemd[1]: [/etc/systemd/system/GDOProxy.service:7] Unknown lvalue ā€˜Enviromentā€™ in section ā€˜Serviceā€™

Any help would be appriciated.

@madj42 First off thanks for creating this. I attempted to set it up the other day and couldnā€™t get it working. I really donā€™t know how to tell if I have the old or the new app, but I am wondering if I have the new one and that is why it doesnā€™t work for me. I have been using your code to play around a bit and have been able to successfully get status and send commands. I may try to rework some things and share it if you are ok with that.

One other questionā€¦does your light status work? I see the code for checking it, but no matter what I do, light on or off, the lightstate value is always false for me. The app I have noticed also does not accurately reflect whether my light is on or off. I am wondering if it just doesnā€™t work or if I have an issue with my opener itself. Thanks!

Nate

If you have the new version that has a separate hub for the door sensor than this is what we found in the time I was able to help get basic functions.
" We were unable to find the light status so this is always shown as off but the button in the DTH works."

I do have the new version with the seperate door sensor. I have it basically working with the mods I made. I just need to put it all back together now.

The light thing is annoying. I have the same experience, I can control it, but canā€™t get status. Itā€™s there, but it doesnā€™t seem to update like it should. Thatā€™s probably why the app also doesnā€™t correctly reflect the light being on/off. I contacted Ryobi about it so weā€™ll see what they say.

The IOS and android apps, if the old version, should have Classic in the names in the app/play store. If itā€™s the new one, I have yet to convert my account and most likely will never due so until forced due to lack of time. Regardless the proxy script file should be able to control the door if you have everything setup correctly. Try using the Debug js files I have in the github repo and see if it returns the correct light and door status.

Ultimately the DTH depends on exact timing for the various door status updates and when the door is shut, it verifies this with another status call to the api. Itā€™s not the best way to do this and if I had the time and knowledge of smartapps, I would create the proper dth and smartpp combo to better reflect the status.

Ohh wait! We are talking about the Smartthings app? I was thinking there was an old garage door opener app. In that case, yes I am using the classic ST app and am in the same boat that I have zero plans to move to the new one unless forced.

I will have to play around with it some more, but when I set it up straight from the github script it would appear to run but I couldnā€™t get status or make anything happen. I will mess around with the debugging and see if I can figure out my issue. Thanks for the reply!

I agree the updating based on waiting a certain amount of time isnā€™t ideal, but I donā€™t know that there is a better way with the current api we have. I have been curious what method the api uses to update the app, I assume it is through the websocket. I spent several hours last night trying to sniff traffic to see, but that was a big fail. However today I have been able to dive into the android apk and see commands that are being used. I think there is a way to subscribe to things with the websocket and then get notifications of changes. I am not at home to try it at the moment, but plan to give it a shot. If it works you could move all the status update logic and code to the proxy and then push any updates to ST when they happen. You donā€™t need a smartapp to do that either. Iā€™ll let you know what I find.

Websocket to turn on the lights and open the doors. Https for all status updates. Look at the proxy js and youā€™ll see the URLs and methods.

Yea, that actually isnā€™t the case. Well it is with the bit of API that was figured out, but I was pretty certain that there was no way the app was making an http call every time it wanted to update. There had to be a websocket method that pushed the data across. I was in fact right and have gotten it working. Now as soon as something changes with the garage door (opens/closes) or even the modules (I only have the parking assist module at the moment but it works) I get instant notifications from the websocket.

I am still refining everything and working on a few other things, but I hope to release something soon. I need to update the DTH as well like I mentioned above so that the proxy service pushes changes to it as soon as they occur rather than have it ask for status updates. All in all I think this will be a nice update to our Ryobi GDO/ST integration.

I would love to be able to see/control my modules in the ST app. I have the fan, park, and speaker.

It is possible. I have the ability now to get the module status in real time. I only have the park one, but it works. I havenā€™t played around with the control piece yet, but I am certain you at a minimum can turn on and off. I am pretty certain you can adjust fan speeds as well. I donā€™t know about the speaker, but will look at what else we can do with that.

I am also working on adding support for multiple openers. It will likely require a smartapp to route the info to the correct device. It would be nice not to go that route, but due to the way ST works I donā€™t think it can be avoided.

You guys should make a youtube video showing us exactly how to do this.

I cannot speak to @madj42ā€™s work, but I am still working on putting something together that will provide instant updates and support multiple openers and module control. I have the basic stuff all down, it is just a matter of putting it all together. I just havenā€™t had the time of late. Once I get something working I will be happy to share details on how to get it working. :slight_smile:

3 Likes

@njschwartz thanks for the work youā€™re doing on the DTH/SmartApp. Youā€™re pretty much doing what I was going to eventually start on but havenā€™t had the time to do. My daughter is 8 months already and starting to crawl and take less naps due to sleep regression so Iā€™ve had less time and have to watch her closely. Wonā€™t lie either, sheā€™s more fun than sitting in front of a computer anyway. :slight_smile: If there is anything I can do to help, let me know.

1 Like