home-assistant / core

:house_with_garden: Open source home automation that puts local control and privacy first.
https://www.home-assistant.io
Apache License 2.0
69.8k stars 28.94k forks source link

MyQ fails to setup with 401 or 429 error #101763

Closed atruest closed 8 months ago

atruest commented 9 months ago

The problem

HA 2023.10.1 worked ok for a few days but now similar failure when trying a reload. See error log below

What version of Home Assistant Core has the issue?

2023.10.1

What was the last working version of Home Assistant Core?

No response

What type of installation are you running?

Home Assistant OS

Integration causing the issue

MyQ

Link to integration documentation on our website

No response

Diagnostics information

Logger: homeassistant.components.myq Source: helpers/update_coordinator.py:322 Integration: MyQ (documentation, issues) First occurred: 10:19:24 AM (1 occurrences) Last logged: 10:19:24 AM

Error fetching myq devices data: Error trying to re-authenticate to myQ service: Error requesting data from https://partner-identity.myq-cloud.com/connect/token: 401 - Unauthorized

Example YAML snippet

No response

Anything in the logs that might be useful for us?

Same issue as before but now with 401 instead of 403

Additional information

No response

sanctas commented 9 months ago

I am having the same issue as well. I recently hooked an ESP32 up to my garage door opener and added 2 reed switches to the garage door so I can control it locally. Very glad I did it.

brad07x commented 9 months ago

Confirming similar behavior and the same error returned from MyQ after reloading HA when the integration is starting. Was working OK since the previous fix was merged until breaking again this morning.

Logger: pymyq.api
Source: components/myq/__init__.py:42
First occurred: 11:30:30 AM (5 occurrences)
Last logged: 11:33:24 AM
Authentication failed: Error requesting data from https://partner-identity.myq-cloud.com/connect/token: 401 - Unauthorized

Similar to @sanctas, I have a ratgdo (https://paulwieland.github.io/ratgdo/) kit on order for local control of my Security+ 2.0 opener, but it would be helpful to have this integration working again until my backordered unit ships out. Thanks all!

EDIT: Wanted to add that the MyQ app on android is working without issues from the same network/internet connection used by my HA instance.

sanctas commented 9 months ago

Similar to @sanctas, I have a ratgdo (https://paulwieland.github.io/ratgdo/) kit on order for local control of my Security+ 2.0 opener, but it would be helpful to have this integration working again until my backordered unit ships out. Thanks all!

I actually used an ESP32 soldered to my wireless garage door opener. I'd use the Ratgdo but it's backordered so I went this route instead.

traveler2100 commented 9 months ago

I lost connect in the last 30 minutes due to 429 Too Many Request but phone app still works:

Config entry 'xxx@xxx.com' for myq integration not ready yet: Got 429 error - stopping request until 2023-10-10 16:30:38.802025. there were 1 request; Retrying in background

luisiam commented 9 months ago

Getting 401 starting from 8:14AM (PDT). Ordered ratgdo and waiting for it to be arrived.

home-assistant[bot] commented 9 months ago

Hey there @ehendrix23, @lash-l, mind taking a look at this issue as it has been labeled with an integration (myq) you are listed as a code owner for? Thanks!

Code owner commands Code owners of `myq` can trigger bot actions by commenting: - `@home-assistant close` Closes the issue. - `@home-assistant rename Awesome new title` Renames the issue. - `@home-assistant reopen` Reopen the issue. - `@home-assistant unassign myq` Removes the current integration label and assignees on the issue, add the integration domain after the command.

(message by CodeOwnersMention)


myq documentation myq source (message by IssueLinks)

justinlindh commented 9 months ago

I actually used an ESP32 soldered to my wireless garage door opener.

Do you have a link handy explaining how this gets wired up/flashed? I'd like to do the same.

Edit: Found this. It should work for me.

barqers commented 9 months ago

Just started geting this error - first it was the 429 error, deleted the integration and waited til the specified time, then tried re-adding it again and now get 401 unauthorized.

Lash-L commented 9 months ago

@home-assistant rename MyQ fails to setup with 401 or 429 error

Lash-L commented 9 months ago

As a reminder - please upvote the original post if you are having the same problem, do not add extra comments stating that you have the same problem - instead upvote the original post. I get buried in notifications and it is extremely difficult to separate helpful information and just chatter.

I don’t have a ton of time this week to try to look at it, but I will try my best. As a reminder to everyone - I don’t own one of these devices, and I am always looking for a new codeowner, I have had one user step forward and attempt to diagnose some problems, I will give them as much support as I can with my limited time this week and if they aren’t able to figure it out, I will try to solve what I can with my limited time

pawelrozek commented 9 months ago

It doesn't seem to be specific to HomeAssistant version. I rolled back to 2023.9.3 and the issue persists.

Smkyb77 commented 9 months ago

I am on 2023.9.2 but the latest MyQ code and it is failing

drysart commented 9 months ago

Fixed by updating api.py so that the call to get the OAuth token more closely represents a valid OAuth token call. Changes highlighted in yellow:

image

As text:

            resp, data = await self.request(
                returns="json",
                method="post",
                url=OAUTH_TOKEN_URI,
                websession=session,
                headers={
                    "Authorization": "Basic SU9TX0NHSV9NWVE6",
                    "Content-Type": "application/x-www-form-urlencoded",
                    "Accept": "*/*",
                },
                data={
                    # "client_id": OAUTH_CLIENT_ID,
                    # "client_secret": OAUTH_CLIENT_SECRET,
                    "code": parse_qs(urlsplit(redirect_url).query).get("code", "")[0],
                    "code_verifier": self._code_verifier,
                    "grant_type": "authorization_code",
                    "redirect_uri": OAUTH_REDIRECT_URI
                    # "scope": parse_qs(urlsplit(redirect_url).query).get(
                    #     "code", "MyQ_Residential offline_access"
                    # ),
                },
                login_request=True,
            )
drysart commented 9 months ago

And as an aside, it seems that MyQ is slowly tightening their API validations; the code needs a thorough once-over to make sure it's actually compliant with OAuth properly and it isn't doing any other extraneous/incorrect stuff; because given the history of this integration over the past month or so, any further deviations from the spec lurking in the code are likely to result in additional breakage in the future.

And also to add, if you apply this fix you may continue to receive 429 errors until your rate limiting on the MyQ API (caused by the broken code previously running and having sent too many requests to the API and getting your IP temporarily blocked for a while). Those issues should clear up within an hour or two.

Lash-L commented 9 months ago

Hey @drysart Thanks for your insight. That's rather interesting - it is my understanding that basically everything the maintainers before me have in this library is just a port from the homebridge myq api. They use scope, client_id, secret, etc.

I have a dummy account with no devices that I have used for testing for logging in before - I can give this a try in a bit and see if I get similar results. Where do you get your "Basic SU9TX0NHSV9NWVE6" from?

Feel free to make a PR on the python-myq repo I'd be more than happy to directly merge in your changes if it works for me as well (If you don't want to for any reason - I can make the changes later)

justinlindh commented 9 months ago

Where do you get your "Basic SU9TX0NHSV9NWVE6" from?

It's just base64 encoded IOS_CGI_MYQ: so I assume it's what the IOS app uses.

I applied drysart's change and am still throttled, but maybe it just needs to clear.

Smkyb77 commented 9 months ago

Can confirm after changes and after the timeout expired I was able to authenticate correctly. The interesting thing now is to see if we get 429's since it is calling more frequently than once per minute.

BeerDiet commented 9 months ago

Trying this now... will report back.

Edit: Still getting 429s, will wait another hour or 2.

Edit edit: Confirmed. Nice work, @drysart!

drysart commented 9 months ago

It's just base64 encoded IOS_CGI_MYQ: so I assume it's what the IOS app uses.

Most likely. I grabbed it from a Postman login request to MyQ.

Can confirm after changes and after the timeout expired I was able to authenticate correctly. The interesting thing now is to see if we get 429's since it is calling more frequently than once per minute.

I don't think it will. The 429s were arising in the first place because the login logic basically spams the service with retries when the login fails (it retries 5 times, then homeassistant restarts the integration which causes it to do it again right away). Without that issue, the API usage should be well below the rate limits.

justinlindh commented 9 months ago

Can confirm that @drysart 's fix did resolve this, once my timeout expired. Has been solid for 10 minutes. Will report back if it loses availability. Thanks!

zander96 commented 9 months ago

I have tested @drysart ‘s changes and can confirm they are working for me and my HA instance is authenticating correctly. Thank you!!

I had disabled the (broken) integration probably 4-5 hours ago when I noticed it wasn’t working, and I didn’t get a 429 error when I tried the changes just now, so if you try and it doesn’t work, try again in a couple hours.

kmurrietta commented 9 months ago

Just wanted to confirm that @drysart 's changes are working for me as well. I would suggest anyone having issues with this to disable able the integration until you get an update to avoid any 429 Rate limit errors

Also, Thank you!!

atruest commented 9 months ago
I second the PR.( I can wait like the 403 change)  I am a novice on Modifying .py files. Any help is appreciated. Sent from Mail for Windows From: Luke LashleySent: Tuesday, October 10, 2023 3:48 PMTo: home-assistant/coreCc: atruest; AuthorSubject: Re: [home-assistant/core] MyQ fails to setup with 401 or 429 error (Issue #101763) Hey @drysart Thanks for your insight. That's rather interesting - it is my understanding that basically everything the maintainers before me have in this library is just a port from the homebridge myq api. They use scope, client_id, secret, etc.I have a dummy account with no devices that I have used for testing for logging in before - I can give this a try in a bit and see if I get similar results. Where do you get your "Basic SU9TX0NHSV9NWVE6" from?Feel free to make a PR on the python-myq repo I'd be more than happy to directly merge in your changes if it works for me as well—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: ***@***.***> 
drysart commented 9 months ago

@Lash-L See https://github.com/Python-MyQ/Python-MyQ/pull/18

neydah700 commented 9 months ago

@drysart updated api.py working for me! Thanks!

mattgahs commented 9 months ago

Can confirm this resolved my issue as well.

You guys are the best. Keep up the great work!

justinlindh commented 9 months ago

The fix worked for a few hours, but I'm getting 403's now. Is anybody else seeing this?

2023-10-10 16:32:51.696 ERROR (MainThread) [homeassistant.components.myq] Error fetching myq devices data: Error trying to re-authenticate to myQ service: Error requesting data from https://partner-identity.myq-cloud.com/connect/token: 403 - Forbidden

It feels like they're actively doing everything in their power to block third party API access, at this point.

New issue within pymyq repo is created around the 403's here: https://github.com/Python-MyQ/Python-MyQ/issues/19

neydah700 commented 9 months ago

The fix worked for a few hours, but I'm getting 403's now. Is anybody else seeing this?

2023-10-10 16:32:51.696 ERROR (MainThread) [homeassistant.components.myq] Error fetching myq devices data: Error trying to re-authenticate to myQ service: Error requesting data from https://partner-identity.myq-cloud.com/connect/token: 403 - Forbidden

It feels like they're actively doing everything in their power to block third party API access, at this point.

anddd it's gone again.

Same as you. Worked for awhile now getting this error again

Attempt 1 request failed with exception : 429 - Too Many Requests

Cireo66 commented 9 months ago

Same issue started for me as well. MyQ must have updated earlier today. Please push update with fix.

drysart commented 9 months ago

Yeah the endpoint was just updated again, my previously working Postman OAuth login isn't working anymore either and failing with a 403. If you're getting 429 it's because of the previously mentioned issue that when login fails, homeassistant repeatedly hits the endpoint until it gets rate-limited.

BeerDiet commented 9 months ago

Same issue started for me as well. MyQ must have updated earlier today. Please push update with fix.

What update? A lot of us in this thread put the aforementioned fix in place manually, and we're again getting 403s/429s.

We're basically back to square one.

mattgahs commented 9 months ago

Can confirm this resolved my issue as well.

  • After updating to 2023.10, my MyQ issues went away, but came back today (cover.garage_door was unavailable, logs reported 401 error).
  • I found this ticket, and found that there was a code update (thanks @drysart!)
  • Logs said the issue was at /usr/local/lib/python3.11/site-packages/pymyq/api.py (your installation may vary)
  • I docker exec'd into my HA container, backed up the file, opened the file in vi, found the code string referenced above within the file
  • I deleted all of the code referenced in the above snippet, then copy/pasted the plaintext version into the file, then saved it
  • Restarted HA
  • Once HA came back up, the MyQ integration began working instantly, both with status and commands.

You guys are the best. Keep up the great work!

I'm now getting 401s:

Authentication failed: Error requesting data from https://partner-identity.myq-cloud.com/connect/token: 401 - Unauthorized 8:58:39 PM – (ERROR) /usr/local/lib/python3.11/site-packages/pymyq/api.py - message first occurred at 8:50:29 PM and shows up 5 times

Config entry 'myq@gahs.us' for myq integration not ready yet: Error requesting data from https://partner-identity.myq-cloud.com/connect/token: 401 - Unauthorized; Retrying in background 8:50:43 PM – (WARNING) /usr/src/homeassistant/homeassistant/config_entries.py - message first occurred at 8:50:29 PM and shows up 3 times

drysart commented 9 months ago

Going to see if I can capture what the iOS app is doing on login, there must be some detail that's missing.

dailow commented 9 months ago

Going to see if I can capture what the iOS app is doing on login, there must be some detail that's missing.

Weird that the homebridge implementation seems to still be working. I don't remember seeing any major differences between the implementations.

ironjaw72 commented 9 months ago

For what it's worth, Homebridge seems to be working. I have only the MyQ plugin installed and have both my openers showing up, and working, in Home Assistant and IOS Homekit.

ur7x commented 9 months ago

I'm down too..

IOS works fine.. HAAS is not getting access.

jermanoid commented 9 months ago

My MyQ integration just disappeared after a reboot while i was experiencing this issue. I've got the latest python-myQ in place, but I can't log in, and getting the 403. Not trying to add noise, but wondering if there's any use in nabbing the token from an auth of the iOS app's auth through an https proxy. Not sure how long the auth would last though.

drysart commented 9 months ago

Can confirm the homebridge myq-api implementation works. There's some stuff that needs to change in python-myq around authentication to mirror it -- namely:

Python-myq also does some automatic user-agent generation that the homebridge implementation doesn't do, but as far as I can tell, passing one doesn't cause a failure.

I poked a bit at my local homeassistant to see if there was a quick fix that would get things working without being too impactful on the code and couldn't get success, and I'm neither fluent enough in Python to do it well, nor set up for easy homeassistant dev/debugging work to tackle a bigger effort, so I'll leave this in the hands of someone better positioned to work on it with hopefully the info above is a good starting point.

Also note that because they seem to require weird cookie behavior and non-standard arguments to the get token endpoint, tools that do standard OAuth stuff, like Postman, no longer work to log into the API (they did earlier today before the last round of API breakage). It must be done non-standard.

(And if it's helpful, during my investigation I implemented a straightforward working login flow in C#, gist here.)

gab696 commented 9 months ago

Can confirm the homebridge myq-api implementation works. There's some stuff that needs to change in python-myq around authentication to mirror it -- namely:

  • The cookie handling across the process isn't standard (there used to be cookie handling in the python-myq code until earlier this month that looked like it was trying to do what myq-api does, but it wasn't doing it correctly), homebridge myq-api manually collects and uses cookies in a certain way and that seems to be important for the login process working -- only some requests get some cookies from certain previous requests, and other requests don't get cookies at all; and that matters.
  • myq-api also does the final get token call differently (it's not OAuth-compliant, but it seems the willful deviation from the spec is necessary; the extra data seems to be needed now when it wasn't a few hours ago).
  • And the most important difference is that myq-api will automatically retry requests on the myq API's east and west domains to try to work around failures and there's no infrastructure for that in python-myq currently. (Right now partner-identity-east.myq-cloud.com gives me tokens, but partner-identity.myq-cloud.com does not; but myq-api's documentation seems to suggest myq's API is very unreliable and it's not unusual for one region to work while the other domains don't.)

Python-myq also does some automatic user-agent generation that the homebridge implementation doesn't do, but as far as I can tell, passing one doesn't cause a failure.

I poked a bit at my local homeassistant to see if there was a quick fix that would get things working without being too impactful on the code and couldn't get success, and I'm neither fluent enough in Python to do it well, nor set up for easy homeassistant dev/debugging work to tackle a bigger effort, so I'll leave this in the hands of someone better positioned to work on it with hopefully the info above is a good starting point.

Also note that because they seem to require weird cookie behavior and non-standard arguments to the get token endpoint, tools that do standard OAuth stuff, like Postman, no longer work to log into the API (they did earlier today before the last round of API breakage). It must be done non-standard.

(And if it's helpful, during my investigation I implemented a straightforward working login flow in C#, gist here.)

Could you explain how to add this workaround login flow in HA setup ?

Reguarding your first solution I assume that the client ID (base64 encoded value for IOS_CGI_MYQ: is unique. Where Can I find it ? Thanks !

Neu-Bob commented 9 months ago

Having the issue and liked the thread here but wanted to just call out that I have the MyQ integration working in NodeRed.. that's my work around for now but it works without issue.

tmorris0221 commented 9 months ago

Having the issue and liked the thread here but wanted to just call out that I have the MyQ integration working in NodeRed.. that's my work around for now but it works without issue.

Can you describe your NodeRed workaround?

Neu-Bob commented 9 months ago

Having the issue and liked the thread here but wanted to just call out that I have the MyQ integration working in NodeRed.. that's my work around for now but it works without issue.

Can you describe your NodeRed workaround?

NodeRed is connected to HomeAssistant using node-red-contrib-home-assistant-websocket.

  1. I installed the MyQ palette into NodeRed (node-red-contrib-myq).
  2. Dropped a MyQ Node for each of my doors into NR and added serial number for each to the nodes and authenticated to MyQ in the nodes. Serial numbers are in the MyQ app.
  3. dropped a binary switch from NodeRed for HomeAssistant on the palette (this adds a binary input into HA) and selected the option to generate output when the binary input was changed.
  4. Named the binary inputs appropriately in NodeRed (door1 / door2)
  5. Added 2 change nodes for each opener, 1 sets the payload as open and 1 sets the payload as close
  6. Wired the switch (input binary) to the change nodes and the change nodes to a myq node
  7. went to HA and using a helper "change the device type of a switch", I made a "cover" for each input_binary (switch) from NR.
  8. opening the cover in ha sends the true command to NR Input Binary, change node changes true to open, open command sent to MyQ Node. viola!

not reporting door status sadly. I will move back to the MyQ integration as soon as I'm able.

Below is the Json you can import right into NR

[ { "id": "a3f120964124df90", "type": "change", "z": "51c622c516c8a591", "name": "open", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "open", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 830, "y": 920, "wires": [ [ "016e7ba6880f23d1" ] ] }, { "id": "8e3aacf010b2ac70", "type": "change", "z": "51c622c516c8a591", "name": "close", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "close", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 830, "y": 980, "wires": [ [ "016e7ba6880f23d1" ] ] }, { "id": "35f465180521a23f", "type": "change", "z": "51c622c516c8a591", "name": "open", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "open", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 830, "y": 1040, "wires": [ [ "936359e0fcb4a45f" ] ] }, { "id": "0e13aa33e9700ddc", "type": "change", "z": "51c622c516c8a591", "name": "close", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "close", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 830, "y": 1080, "wires": [ [ "936359e0fcb4a45f" ] ] }, { "id": "016e7ba6880f23d1", "type": "myq-device-node", "z": "51c622c516c8a591", "user": "", "name": "Big Garage Door", "serialnumber": "", "x": 1110, "y": 940, "wires": [ [] ] }, { "id": "936359e0fcb4a45f", "type": "myq-device-node", "z": "51c622c516c8a591", "user": "", "name": "Small Garage Door", "serialnumber": "", "x": 1110, "y": 1040, "wires": [ [] ] }, { "id": "7673e7bf46bb3ea1", "type": "ha-switch", "z": "51c622c516c8a591", "name": "Big Garage Door", "version": 0, "debugenabled": false, "inputs": 0, "outputs": 2, "entityConfig": "6185f9a1625590f6", "enableInput": false, "outputOnStateChange": true, "outputProperties": [ { "property": "outputType", "propertyType": "msg", "value": "state change", "valueType": "str" }, { "property": "payload", "propertyType": "msg", "value": "", "valueType": "entityState" } ], "x": 420, "y": 940, "wires": [ [ "a3f120964124df90" ], [ "8e3aacf010b2ac70" ] ] }, { "id": "b24789226ff552c0", "type": "ha-switch", "z": "51c622c516c8a591", "name": "Small Garage Door", "version": 0, "debugenabled": false, "inputs": 0, "outputs": 2, "entityConfig": "77d344e869e4608e", "enableInput": false, "outputOnStateChange": true, "outputProperties": [ { "property": "outputType", "propertyType": "msg", "value": "state change", "valueType": "str" }, { "property": "payload", "propertyType": "msg", "value": "", "valueType": "entityState" } ], "x": 430, "y": 1060, "wires": [ [ "35f465180521a23f" ], [ "0e13aa33e9700ddc" ] ] }, { "id": "6185f9a1625590f6", "type": "ha-entity-config", "server": "5fbe2452be6e7165", "deviceConfig": "f13664967f4d97cc", "name": "Big Garage Door", "version": "6", "entityType": "switch", "haConfig": [ { "property": "name", "value": "Big Garage Door" }, { "property": "icon", "value": "" }, { "property": "entity_category", "value": "" }, { "property": "entity_picture", "value": "" }, { "property": "device_class", "value": "" } ], "resend": false, "debugEnabled": false }, { "id": "77d344e869e4608e", "type": "ha-entity-config", "server": "5fbe2452be6e7165", "deviceConfig": "d7d9b3a627f6cec9", "name": "Small Garage Door", "version": "6", "entityType": "switch", "haConfig": [ { "property": "name", "value": "Small Garage Door" }, { "property": "icon", "value": "" }, { "property": "entity_category", "value": "" }, { "property": "entity_picture", "value": "" }, { "property": "device_class", "value": "" } ], "resend": false, "debugEnabled": false }, { "id": "5fbe2452be6e7165", "type": "server", "name": "Home Assistant", "version": 5, "addon": false, "rejectUnauthorizedCerts": true, "ha_boolean": "y|yes|true|on|home|open", "connectionDelay": true, "cacheJson": true, "heartbeat": true, "heartbeatInterval": "30", "areaSelector": "friendlyName", "deviceSelector": "friendlyName", "entitySelector": "friendlyName", "statusSeparator": ": ", "statusYear": "hidden", "statusMonth": "short", "statusDay": "numeric", "statusHourCycle": "default", "statusTimeFormat": "h:m", "enableGlobalContextStore": true }, { "id": "f13664967f4d97cc", "type": "ha-device-config", "name": "Big Garage Door", "hwVersion": "", "manufacturer": "Node-RED", "model": "", "swVersion": "" }, { "id": "d7d9b3a627f6cec9", "type": "ha-device-config", "name": "Small Garage Door", "hwVersion": "", "manufacturer": "Node-RED", "model": "", "swVersion": "" } ]

hawkseye76 commented 9 months ago

[ { "id": "a3f120964124df90", "type": "change", "z": "51c622c516c8a591", "name": "open", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "open", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 830, "y": 920, "wires": [ [ "016e7ba6880f23d1" ] ] }, { "id": "8e3aacf010b2ac70", "type": "change", "z": "51c622c516c8a591", "name": "close", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "close", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 830, "y": 980, "wires": [ [ "016e7ba6880f23d1" ] ] }, { "id": "35f465180521a23f", "type": "change", "z": "51c622c516c8a591", "name": "open", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "open", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 830, "y": 1040, "wires": [ [ "936359e0fcb4a45f" ] ] }, { "id": "0e13aa33e9700ddc", "type": "change", "z": "51c622c516c8a591", "name": "close", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "close", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 830, "y": 1080, "wires": [ [ "936359e0fcb4a45f" ] ] }, { "id": "016e7ba6880f23d1", "type": "myq-device-node", "z": "51c622c516c8a591", "user": "", "name": "Big Garage Door", "serialnumber": "", "x": 1110, "y": 940, "wires": [ [] ] }, { "id": "936359e0fcb4a45f", "type": "myq-device-node", "z": "51c622c516c8a591", "user": "", "name": "Small Garage Door", "serialnumber": "", "x": 1110, "y": 1040, "wires": [ [] ] }, { "id": "7673e7bf46bb3ea1", "type": "ha-switch", "z": "51c622c516c8a591", "name": "Big Garage Door", "version": 0, "debugenabled": false, "inputs": 0, "outputs": 2, "entityConfig": "6185f9a1625590f6", "enableInput": false, "outputOnStateChange": true, "outputProperties": [ { "property": "outputType", "propertyType": "msg", "value": "state change", "valueType": "str" }, { "property": "payload", "propertyType": "msg", "value": "", "valueType": "entityState" } ], "x": 420, "y": 940, "wires": [ [ "a3f120964124df90" ], [ "8e3aacf010b2ac70" ] ] }, { "id": "b24789226ff552c0", "type": "ha-switch", "z": "51c622c516c8a591", "name": "Small Garage Door", "version": 0, "debugenabled": false, "inputs": 0, "outputs": 2, "entityConfig": "77d344e869e4608e", "enableInput": false, "outputOnStateChange": true, "outputProperties": [ { "property": "outputType", "propertyType": "msg", "value": "state change", "valueType": "str" }, { "property": "payload", "propertyType": "msg", "value": "", "valueType": "entityState" } ], "x": 430, "y": 1060, "wires": [ [ "35f465180521a23f" ], [ "0e13aa33e9700ddc" ] ] }, { "id": "6185f9a1625590f6", "type": "ha-entity-config", "server": "5fbe2452be6e7165", "deviceConfig": "f13664967f4d97cc", "name": "Big Garage Door", "version": "6", "entityType": "switch", "haConfig": [ { "property": "name", "value": "Big Garage Door" }, { "property": "icon", "value": "" }, { "property": "entity_category", "value": "" }, { "property": "entity_picture", "value": "" }, { "property": "device_class", "value": "" } ], "resend": false, "debugEnabled": false }, { "id": "77d344e869e4608e", "type": "ha-entity-config", "server": "5fbe2452be6e7165", "deviceConfig": "d7d9b3a627f6cec9", "name": "Small Garage Door", "version": "6", "entityType": "switch", "haConfig": [ { "property": "name", "value": "Small Garage Door" }, { "property": "icon", "value": "" }, { "property": "entity_category", "value": "" }, { "property": "entity_picture", "value": "" }, { "property": "device_class", "value": "" } ], "resend": false, "debugEnabled": false }, { "id": "5fbe2452be6e7165", "type": "server", "name": "Home Assistant", "version": 5, "addon": false, "rejectUnauthorizedCerts": true, "ha_boolean": "y|yes|true|on|home|open", "connectionDelay": true, "cacheJson": true, "heartbeat": true, "heartbeatInterval": "30", "areaSelector": "friendlyName", "deviceSelector": "friendlyName", "entitySelector": "friendlyName", "statusSeparator": ": ", "statusYear": "hidden", "statusMonth": "short", "statusDay": "numeric", "statusHourCycle": "default", "statusTimeFormat": "h:m", "enableGlobalContextStore": true }, { "id": "f13664967f4d97cc", "type": "ha-device-config", "name": "Big Garage Door", "hwVersion": "", "manufacturer": "Node-RED", "model": "", "swVersion": "" }, { "id": "d7d9b3a627f6cec9", "type": "ha-device-config", "name": "Small Garage Door", "hwVersion": "", "manufacturer": "Node-RED", "model": "", "swVersion": "" } ]

Great solution. Works like a charm!

rlyons20 commented 9 months ago

Has anyone reached out to MyQ directly? HomeAssistant is a big enough community/product that they'd probably be willing to work with us, so that A) we are happy, and B) we don't break their API.

Neu-Bob commented 9 months ago

Has anyone reached out to MyQ directly? HomeAssistant is a big enough community/product that they'd probably be willing to work with us, so that A) we are happy, and B) we don't break their API.

They'd be happy to charge us, like they do every other integration.

rlyons20 commented 9 months ago

i mean... i'm a paying customer. i bought their hardware, and pay a monthly fee to connect their service to my car.

MikeMcGlinch commented 9 months ago

(Thrusting hips violently) "Corporate Greed!!"

MikeMcGlinch commented 9 months ago

My problem is that I started my smart home with MyQ Garage Door Openers, wall switches, and plug sockets. I have an original MyQ Hub (before it was smart). I was under the assumption that I was operating on MY wifi using access locally to MY hub. Now I find out that access is all via the cloud? And that they have the ability to now charge me for access to MY devices?
I was able to get access on IFTT for a minute before THEY went the "Corporate Greed" route ( I think it was the month before it happened), Then I found HomeBridge, which worked great, and then I went to HA - which worked even better. Now I want to get access locally - and if that means pulling switches out of the walls, I'll be disappointed but I'll do it.
I also have used Shelly relays - and some of the things I'm seeing there are starting to concern me. It's almost as if the heads of these corporations either do not use their own products, or are so blinded by the fact that they will get their (free) access no matter what that they can't see the situation from our perspective (or are so greedy that it doesn't matter).

briadelour commented 9 months ago

They would sell more of these boxes if they also opened up a local API to talk to the devices on your local network from your HA server rather than force the cloud service API dependency. I can't image it would be any more or less security. If your cloud account can be hacked your garage can be opened from anywhere in the world. If you protect your home network, someone would have to break into your home network to talk to the device locally to open your door.

MikeMcGlinch commented 9 months ago

They would sell more of these boxes if they also opened up a local API to talk to the devices on your local network from your HA server rather than force the cloud service API dependency. I can't image it would be any more or less security. If your cloud account can be hacked your garage can be opened from anywhere in the world. If you protect your home network, someone would have to break into your home network to talk to the device locally to open your door.

Hear Hear!!