Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Netgear switch state update #69597

Merged
merged 1 commit into from Apr 10, 2022

Conversation

starkillerOG
Copy link
Contributor

Breaking change

Proposed change

Request a coordinator update after blocking/allowing a device from the network.
Withouth this PR if the device is allowed on the network and the switch is toggled to block, the switch would go back to allow after 10 seconds and would then go to block after about 30 seconds (fairly slow scan intervall).
This PR fixes that behaviour by emediatly updating after a change.
Reported in issue: #67835

Type of change

  • Dependency upgrade
  • Bugfix (non-breaking change which fixes an issue)
  • New integration (thank you!)
  • New feature (which adds functionality to an existing integration)
  • Breaking change (fix/feature causing existing functionality to break)
  • Code quality improvements to existing code or addition of tests

Additional information

Checklist

  • The code change is tested and works locally.
  • Local tests pass. Your PR cannot be merged unless tests pass
  • There is no commented out code in this PR.
  • I have followed the development checklist
  • The code has been formatted using Black (black --fast homeassistant tests)
  • Tests have been added to verify that the new code works.

If user exposed functionality or configuration variables are added/changed:

If the code communicates with devices, web services, or third-party tools:

  • The manifest file has all fields filled out correctly.
    Updated and included derived files by running: python3 -m script.hassfest.
  • New or updated dependencies have been added to requirements_all.txt.
    Updated by running python3 -m script.gen_requirements_all.
  • For the updated dependencies - a link to the changelog, or at minimum a diff between library versions is added to the PR description.
  • Untested files have been added to .coveragerc.

The integration reached or maintains the following Integration Quality Scale:

  • No score or internal
  • 馃 Silver
  • 馃 Gold
  • 馃弳 Platinum

To help with the load of incoming pull requests:

@probot-home-assistant
Copy link

Hey there @hacf-fr, @Quentame, mind taking a look at this pull request as it has been labeled with an integration (netgear) you are listed as a code owner for? Thanks!
(message by CodeOwnersMention)

@project-bot project-bot bot added this to Needs review in Dev Apr 7, 2022
@project-bot project-bot bot moved this from Needs review to By Code Owner in Dev Apr 7, 2022
@MartinHjelmare MartinHjelmare changed the title Netgear request update after switch Fix Netgear switch state update Apr 9, 2022
@@ -90,10 +90,12 @@ def is_on(self):
async def async_turn_on(self, **kwargs):
"""Turn the switch on."""
await self._router.async_allow_block_device(self._mac, ALLOW)
await self.coordinator.async_request_refresh()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a 10 second debounce when using async_request_refresh. If we don't want a debounce we should use async_refresh.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MartinHjelmare I am a bit torn on this, I know that the netgear API can be overloaded by sending to many requests wich can actually cause the API to crash in some rare cases (a reboot of the router is then nessesary).
So if someone makes an automation to for instance block a list of 10 devices at a specific time (for instance at bedtime of there childeren) I don't want to have 10 update API requests at once. (these updates request a whole list of properties for all connected devices so it is a rather big XML file that is requested from the Router, a single update normaly takes around 2 seconds).

Therefore I think the debounce is actually a good thing.

Am I correct that it will run the update immediately if the last update was more then 10 seconds ago?

What happens if we were to call async_refresh 10 times within 1 second while the actual update takes about 2 seconds (so 2x10 = 20 seconds), Note there is a AsyncLock on the API?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the debouncer will run the refresh immediately if the last refresh was more than 10 seconds ago.

Since we have the lock, the calls will be done sequentially.

Should we stick with the debounced refresh then?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes lets stick to the debounced refresh, I think that will cause less problems.

@MartinHjelmare MartinHjelmare added this to the 2022.4.2 milestone Apr 9, 2022
Dev automation moved this from By Code Owner to Reviewer approved Apr 10, 2022
@balloob balloob merged commit f579c6d into home-assistant:dev Apr 10, 2022
Dev automation moved this from Reviewer approved to Done Apr 10, 2022
balloob pushed a commit that referenced this pull request Apr 11, 2022
@balloob balloob mentioned this pull request Apr 11, 2022
@github-actions github-actions bot locked and limited conversation to collaborators Apr 12, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
Dev
  
Done
Development

Successfully merging this pull request may close these issues.

None yet

4 participants