Controlling Ryobi GDO Garage Door via HA

After working with @guillaume1410, who mind you did the majority of this coding, I’ve uploaded the code to GitHub with his blessing. Really the only changes I’ve made was updating the code to use CoverEntity, updating it to use the new custom_component naming file naming standards, and added the light control. There is limited support for this component and it should be considered a beta release since the TiwiConnect system appears to be unstable itself. In order to use this, you’ll need to use the to get the door id. If you run into issues with setting up the component after running this script, you’ll most likely need to wait about a week as it appears their is something on the backend that blocks everything from working (including the official app). I have also added HACS support to the repo but have not tested this installation method.

A couple of things to keep in mind. The light status updates every 5 minutes and the door status updates every 2 minutes. You can change these values within the python code itself if you’d like but if you have issues, it is recommended to change them back.


Thanks for this. Woke up this morning to an open garage door (again) and thought maybe I should see if anyone has updated the Ryobi integration. And, Viola!, there it is. Thanks!

But I’m having an issue. I am getting the following:

Platform error light.ryobi_gdo3 - Integration 'ryobi_gdo3' not found.
Platform error cover.ryobi_gdo3 - Integration 'ryobi_gdo3' not found.

I have copied the folder to the custom_components folder.

I bypassed the secrets file just to simplify and have username and password in the configuration.yaml for testing.

Door ID was not a problem.

Any clue?

Well, that was a silly problem. I forgot to remove the ryobi_device_id bit when not using secrets…

Glad it was a simple fix. Everything working ok?

Actually no. But haven’t had time to dig into it. If I go to Developer Tools> States I can see both entities. But the status is incorrect. And can’t open or close the door. So maybe I just need to wait the week :slight_smile:

Then I’ll need to learn what to do with it, since I’m a complete newb as far as HA.

If you can point me in a direction. Besides just a button to open or close the door, I want to monitor it and close it if it is open longer than some period of time after some hour.

Does the official app still work? I ran into the same issue with the door not working and the official app failed as well. You may want to try cycling the power on the door (pull the battery if you have one too).

You should be able to use the door entity to achieve what you want. You can have the trigger be at a specific time and the action be the door close.

The app works well. I have to cycle my access point occasionally. But otherwise it’s working fine.

Do you see anything in the HA logs? You may want to enable debug for the component.

    custom_components.ryobi_gdo3.cover: debug

Then restart HA and see if anything shows in the logs as to what the issue may be. I apologize for the delay in getting back to you.

I see a bunch of, what look like, positive results. But there’s a lot of them. Then an error pops up:

2020-08-03 17:50:33 DEBUG (SyncWorker_3) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 17:52:33 DEBUG (SyncWorker_1) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 17:54:33 DEBUG (SyncWorker_9) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 17:56:33 DEBUG (SyncWorker_9) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 17:58:33 DEBUG (SyncWorker_1) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:00:33 DEBUG (SyncWorker_3) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:01:53 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/aiohttp/", line 275, in data_received
    messages, upgraded, tail = self._request_parser.feed_data(data)
  File "aiohttp\_http_parser.pyx", line 523, in aiohttp._http_parser.HttpParser.feed_data
aiohttp.http_exceptions.BadStatusLine: invalid HTTP method

Then a bit further on:

2020-08-03 18:02:33 DEBUG (SyncWorker_11) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:04:33 DEBUG (SyncWorker_7) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:06:33 DEBUG (SyncWorker_2) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:08:33 DEBUG (SyncWorker_10) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:10:33 DEBUG (SyncWorker_5) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:12:33 DEBUG (SyncWorker_8) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:14:33 DEBUG (SyncWorker_3) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:16:33 DEBUG (SyncWorker_5) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:18:33 DEBUG (SyncWorker_8) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:20:33 DEBUG (SyncWorker_9) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:22:33 DEBUG (SyncWorker_2) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:24:33 DEBUG (SyncWorker_0) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:26:33 DEBUG (SyncWorker_7) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:28:33 DEBUG (SyncWorker_6) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:30:33 DEBUG (SyncWorker_2) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:32:33 DEBUG (SyncWorker_2) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status
2020-08-03 18:32:45 ERROR (MainThread) [frontend.js.latest.202007160] TypeError: this.shadowRoot.querySelector(...) is null

Mean anything to you?

I’m not seeing anything other than it trying to update the status. The error it shows is not related. Did you use the door id script I wrote to gather the door id? I’m also wondering what is shown in the logs when you restart HA. This should show that the api key was pulled and that the cover was added. Also, try opening the door and see if it shows anything different in the logs.

I ran the door id script again just before I pulled this log info to verify that it was indeed correct. I’ll restart HA when I get home and look for startup info. And get log info from opening/closing etc.

Just tried closing the door, although it is actually already closed. But the state never changes from open. This is what it logged:

2020-08-04 22:01:06 DEBUG (SyncWorker_6) [custom_components.ryobi_gdo3.cover] Closing garage door
2020-08-04 22:01:06 DEBUG (SyncWorker_3) [custom_components.ryobi_gdo3.cover] Updating RyobiGDO status

But the status never changes.

Really not sure what is going on here as it’s strange that the door gives a status and creates the entities. Try doing this:

Find the line that begins with “s_dict= s.json()” in Put this right after it: print(s_dict). Comment out the last line in the script. Run this like you did the last time and see if there multiple results that show.

You wouldn’t happen to have two doors associated with your account, would you? Also, try manually adding the pypi code and see if that changes anything. You’d need to run pip3 install py-ryobi-gdo from the system running HA.

I do not have 2 doors. I did add the print(s_dict) line and ran the script. I see another u u’varName’: u’###’ in the list. I had trouble installing this originally (almost a year ago) and had to reset the GDO and reconnect everything. It’s been working great since. But it seems there are remnants. Not sure how to clean this out since the app shows only one opener.

Turns out that you can go to this URL:[email protected]&password=some-password

And see all of the info in an XML page. I indeed see two devices. I will try to change to the other when I get home tonight and see if tht fixes it.

It was indeed the “second” ID. So obviously when I first installed it and had to redo it to get it to work, the first one was still attached to the account.

I just closed the door and turned the light on and off from HA. All is well.


1 Like

Glad it worked and we could finally figure out the issue. Weird you have two but hey, at least it works.

1 Like

Anyone got a wrong door report?

My door is currently closed (physical and Ryobi App) but the integration show it’s open.

I had this happen a few times. But it almost always was outside HA. I’ve had to restart my wifi access point a few times. But I have had to restart HA to get it working sometimes.

Helping a friend set his up. He’s got a Ryobi GDO 200. I used the link above to pull the ID of the door and added to config.yaml and have the custom component in place, but log files show that the device ID isn’t listed in devices.

Any ideas where to start troubleshooting?