Ryobi Garage Door Opener

Ohh nice I'm glad it's working for you. Getting the IDs from the logs is by design, but did it say something like "your garage id is: XXX"? I did it that way so if you have more than one you can pick which one you want. Thanks for the inflator logs. I will do what I can to get that working as best I can. Thanks!

One feature I wish I had was the ability to open the door to a position (I see that your app tracks the door position as it opens and closes). For example a rule that opens the door to position 5 (crack the door to 4" or whatever 5 corresponds to) and turn on the fan when it gets above a certain temperature.

I think it did say something like your garage id is: XXX" - it was easy to see. Can't reproduce it again without deleting and recreating the device.....

Thanks, Simon

1 Like

My GD200 is stuck at
java.lang.Exception: No response data exists for async request on line 298 (processGarageStateRequest)

Has anyone got a GD200 working? I am afraid the original looks to very different

I believe @matthewschultz92 has the 200 so it should work. Can you post your logs so I can see what's happening before the error? The code you posted if similar particularly with regard to the status update. The main difference is I'm using websockets. Either way, let me see what's happening and perhaps I can find the problem.

Affirmative, I have the 200. The only time I recall seeing any errors is when It tried to use a number other than the "varName:"xxx for the ID.

Let me know if you need me to test anything.

Is this a port from ST? I thought I remembered seeing that you needed to replace "physicalgraph" with hubitat in your drivers. Full disclosure, I am not a programmer. This just something I noticed when reading up on porting drivers from the other platform.

I'm hoping to have some code for testing very shortly. Been caught up on another project as well, but should be able to work with it tonight.

I think he's just comparing my code to that other implementation. They are similar obviously, but assuming he's using my code from above I'm not sure the issue. Hopefully the logs will show us the problem. :smile:

I deleted all the old work and reinstalled. Got same error.

dev:2252019-07-31 07:09:27.979 pm debugparsed {"jsonrpc":"2.0","result":{"result":"OK","aCnt":0},"id":3}

dev:2252019-07-31 07:09:27.945 pm debugparsed {"jsonrpc":"2.0","result":{"authorized":true,"varName":"xxxx@xxx.com","aCnt":0},"id":3}

dev:2252019-07-31 07:09:27.904 pm debugparsed {"jsonrpc":"2.0","method":"authorizedWebSocket","params":{"authorized":true,"socketId":"1296fc32.ip-172-31-24-78.4007"}}

dev:2252019-07-31 07:09:26.772 pm infosuccess! reset reconnect delay

dev:2252019-07-31 07:09:26.771 pm infowebsocket is open

dev:2252019-07-31 07:09:26.769 pm debugwebSocketStatus- status: open

dev:2252019-07-31 07:09:26.731 pm errorjava.lang.Exception: No response data exists for async request on line 294 (processGarageStateRequest)

dev:2252019-07-31 07:09:26.660 pm debugGetting the module number of your door

dev:2252019-07-31 07:09:26.638 pm debugStatus of Device request response call is: 500

dev:2252019-07-31 07:09:26.634 pm debugGot Status request response

dev:2252019-07-31 07:09:26.256 pm infoUpdating Status

dev:2252019-07-31 07:09:26.254 pm debugwebSocketStatus- null

dev:2252019-07-31 07:09:26.243 pm debugRyobi Garage

dev:2252019-07-31 07:09:25.657 pm infoinitialize() called

dev:2252019-07-31 07:09:25.618 pm infoupdated() called

dev:2252019-07-31 07:08:52.845 pm debuggdoMasterUnit

dev:2252019-07-31 07:08:52.796 pm debug[result:[[_id:59b55bfe9b9829bc153c7701, varName:c4be84f2ebd0, metaData:[name:garage door, version:1, icon:/img/devices/gdo.png, description:RYOBI Connected Garage Door Opener Master Unit, wskAuthAttempts:[[varName:c4be84f2ebd0, apiKey:muztJeENhoWZxYbtJUEfcBjM, ts:2019-07-25 06:54:02, success:true], [varName:c4be84f2ebd0, apiKey:muztJeENhoWZxYbtJUEfcBjM, ts:2019-07-26 18:48:41, success:true], [varName:c4be84f2ebd0, apiKey:muztJeENhoWZxYbtJUEfcBjM, ts:2019-07-28 23:01:10, success:true], [varName:c4be84f2ebd0, apiKey:muztJeENhoWZxYbtJUEfcBjM, ts:2019-07-30 13:07:10, success:true], [varName:c4be84f2ebd0, apiKey:muztJeENhoWZxYbtJUEfcBjM, ts:2019-07-31 05:21:10, success:true]], authCount:570, sys:[lastSeen:1564614514728], socketId:0072f690.ip-172-31-50-175.4007_c4be84f2ebd0], enabled:true, deleted:false, createdDate:2017-09-10T15:36:30.597Z, activated:2, deviceTypeIds:[gdoMasterUnit], activatedDate:2018-09-11T04:00:02.140Z]]]

dev:2252019-07-31 07:08:52.828 pm debuggdoMasterUnit

dev:2252019-07-31 07:08:52.786 pm debug[result:[[_id:59b55bfe9b9829bc153c7701, varName:c4be84f2ebd0, metaData:[name:garage door, version:1, icon:/img/devices/gdo.png, description:RYOBI Connected Garage Door Opener Master Unit, wskAuthAttempts:[[varName:c4be84f2ebd0, apiKey:muztJeENhoWZxYbtJUEfcBjM, ts:2019-07-25 06:54:02, success:true], [varName:c4be84f2ebd0, apiKey:muztJeENhoWZxYbtJUEfcBjM, ts:2019-07-26 18:48:41, success:true], [varName:c4be84f2ebd0, apiKey:muztJeENhoWZxYbtJUEfcBjM, ts:2019-07-28 23:01:10, success:true], [varName:c4be84f2ebd0, apiKey:muztJeENhoWZxYbtJUEfcBjM, ts:2019-07-30 13:07:10, success:true], [varName:c4be84f2ebd0, apiKey:muztJeENhoWZxYbtJUEfcBjM, ts:2019-07-31 05:21:10, success:true]], authCount:570, sys:[lastSeen:1564614514728], socketId:0072f690.ip-172-31-50-175.4007_c4be84f2ebd0], enabled:true, deleted:false, createdDate:2017-09-10T15:36:30.597Z, activated:2, deviceTypeIds:[gdoMasterUnit], activatedDate:2018-09-11T04:00:02.140Z]]]

dev:2252019-07-31 07:08:52.789 pm debugStatus of Device request response call is: 200

dev:2252019-07-31 07:08:52.786 pm debugGot Device request response

dev:2252019-07-31 07:08:52.780 pm debugStatus of Device request response call is: 200

dev:2252019-07-31 07:08:52.777 pm debugGot Device request response

dev:2252019-07-31 07:08:52.153 pm infoYour API key is XXXXXX

dev:2252019-07-31 07:08:51.972 pm debug[result:[id:59b559ba4b1e880c1cbaf0ad, varName:russellch@icloud.com, metaData:[companyName:, surName:, givenName:, sys:[ip:71.203.99.184, lastSeen:1564537515796], autoLogout:false, wskAuthAttempts:[[varName:xxxx@xxxx.com, apiKey:xxxxxx, ts:2019-07-29 18:05:54, success:true], [varName:xxxxx@xxxx.com, apiKey:xxxxxx, ts:2019-07-30 00:47:25, success:true], [varName:xxxxx@xxxx.com.com, apiKey:xxxxx, ts:2019-07-31 01:23:27, success:true], [varName:xxxxx@xxxx.com.com, apiKey:xxxxx, ts:2019-07-31 01:23:39, success:true], [varName:xxxxx@xxxx.com.com, apiKey:xxxxx, ts:2019-07-31 01:45:15, success:true]], authCount:203], accountOptions:[email:russellch@icloud.com, alertPhone:, alertEmail:xxxxx@xxxx.com.com, receiveEmailUpdates:false, receiveEmailAlerts:false, receiveSmsAlerts:false], enabled:true, deleted:false, createdDate:2017-09-10T15:26:50.316Z, activated:0, notificationTransports:[], auth:[apiKey:2a286c6c, regPin:adb0, clientUserName:russellch@icloud.com, createdDate:2017-09-10T15:26:50.318Z, childSelectors:[59b55bfe9b9829bc153c7701], roleMap:[roleSelectors:[], roleRegex:[^GET/api/(auths?|sessions?|ping|notifications?|user-name)/?$, ^PUT/api/(users?|auth-selectors?|user-name)/?$, ^GET/api/(notifications?|triggers?|subscriptions?|endnodes?|clients?|devices?|users?|attributes?)(\W?\w+)$, ^GET/api/users?/(config|session)/?$, ^(GET|PUT)/api/dashboards?(\W?\w+)$, ^POST/api/(endnodes?|actions?|devices?)/?$, ^DELETE/api/(devices?|endnodes?|auth-selectors?)/?\w+/?$, ^(GET|PUT|POST)/api/users?/config/?$, ^GET/api/log, ^PUT/api/(endnodes?|devices?)/\w+/?$, ^POST/api/uploads?/image/?$, ^(GET|POST)/api/(triggers?|subscriptions?)/?$, ^(PUT|DELETE|GET)/api/(triggers?|subscriptions?), ^(PUT|DELETE)/api/(notifications?)/\w+/?$, ^(GET)/api/triggers/.+/(subscribe|unsubscribe)/[a-zA-Z]+/?$, ^(GET|PUT|POST)/api/groups, ^PUT/api/(auths?|users?)/password/?$, ^GET/api/websockets?/ticket/?$, ^PUT/api/rpc/?$, RPC/.*, ^(GET|PUT|POST|DELETE)/api/tti, ^(GET|PUT|POST|DELETE)/api/notif-delivery, ^(GET)/api/notif-services?, ^PUT/api/attributes?/\w+/garageDoor[0-9]{1,2}/presetPosition/?$, ^GET/api/auths?/session-token/?$, ^(GET|DELETE)/api/activity-logs(/.+){1,2}], roleNames:[site_user]], roleIds:[5526b99fb9cf33db6189438a], clientSchema:UserAccountModel]]]

dev:2252019-07-31 07:08:51.951 pm debugStatus of Login call is: 200

dev:2252019-07-31 07:08:51.948 pm debugLogin Response

dev:2252019-07-31 07:08:50.537 pm warnNeed Api Key...attempting to login and obtain

dev:2252019-07-31 07:08:50.534 pm infoinitialize() called

dev:2252019-07-31 07:08:50.495 pm infoupdated() called

dev:2252019-07-31 07:08:34.149 pm warnNeed username and password

dev:2252019-07-31 07:08:34.140 pm infoinitialize() called

dev:2252019-07-31 07:08:34.125 pm infoinstalled() called

Did you copy the garageId into the device handler? I think that is your issue. It is all basically working as it should otherwise it appears. In your case, because at the time I didn't know the 200 even existed, it isn't displaying it as pretty as you might want it to. Your garageID is: c4be84f2ebd0 Make sure that is what is in the garageId field in the device handler and hit save preferences and see what happens.

@stat @matthewschultz92 @simon I have good news. I have made progress and figured out how to control modules via the websocket. I made a child device for my parking laser and can turn it off or on as needed and it updates it state automatically via the websocket as well. Now that I know how it is done and that I can make it work I just need to go through your guys data and write code for the other devices (fan, inflator, speaker). I am not sure what to do about the light yet. On the newer models (126/201) the state does not get updated so it might end up out of sync. Not the end of the world, but annoying. I will probably make it a child device anyway and at least you can control it even if you cannot be sure if it is on or off...

@matthewschultz92 I am not sure about the door position thing. I will look into it more when I finish adding the modules I have data for. I am going out of town for a couple of weeks, but I will try to get an update posted in the next day or so before I go.

1 Like

Thank you. I copied the API key in for some reason, I have control of the door. Though I am have not committed to program automatic open or closes yet.

Great news on making headway on the modules Nate! Again, Thank you for all the work you have completed for this!

In reference to the light, I'm wondering @njschwartz & @Stat Can you control the light through the Ryobi app? I can't imagine that you can't ... The app must be getting feedback somehow...

@njschwartz No problem on the position thing, I recognize it is secondary compared to everything else. Just getting the ability to control the door is huge to me at this point!

I can control the light yes. But state doesn't work. When I tap the light button it toggles on off but eventually always changes back to off a few seconds later because no message is ever sent by the garage door that it's on. It's hard to believe they messed that up, but they did. Ohh well.

1 Like

I am able to control the light through the Ryobi App, but it does not appear in the Hubitat logs when turning on/off.

Seems like Ryobi has been slow to send garage door status updates lately? I can open and then close the garage door before Hubitat can see the doors status changing. Anyone else seeing this?

I haven't seen that.

So I hit the Refresh button for the driver and it's back to normal again. Must have been some of the changes Ryobi has made as I recieved at least two updates for their app recently...

Where is the refresh button?

In @njschwartz most excellent Ryobi GDO driver, See below:

I have only programmed closures so far. I do so when family leaves and forgets to close the door. That happens at least once a month...