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

Yeelight disable polling #59885

Merged
merged 4 commits into from Nov 19, 2021

Conversation

starkillerOG
Copy link
Contributor

@starkillerOG starkillerOG commented Nov 18, 2021

Breaking change

Proposed change

Add a force update service to the yeelight integration.
The regular homeassistant.update_entity does not work for the yeelight integration since updates are not executed as long as the device is available (polling is turned on but if the device is available the update function emidiatly returns withouth doing the update, if the device is unavailable the update is actually executed).
This new force update service will actually update the device even if it is available.

Disable polling of the yeelight integration and let it be handeld by the upstream lib.
Make the async_update function force and update such that homeassistant.update_entity will actually get the state from the bulb.

relevant lines:

async def async_update(self, force=False):
"""Update device properties and send data updated signal."""
if not force and self._initialized and self._available:
# No need to poll unless force, already connected
return

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

  • This PR fixes or closes issue: fixes #
  • This PR is related to issue:
  • Link to documentation pull request:

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 @rytilahti, @zewelor, @shenxn, mind taking a look at this pull request as it has been labeled with an integration (yeelight) you are listed as a code owner for? Thanks!
(message by CodeOwnersMention)

@project-bot project-bot bot moved this from Needs review to By Code Owner in Dev Nov 18, 2021
@MartinHjelmare MartinHjelmare changed the title yeelight add force update service Add yeelight force update service Nov 18, 2021
@bdraco
Copy link
Member

bdraco commented Nov 18, 2021

Any reason we can't make this much simpler and do

diff --git a/homeassistant/components/yeelight/__init__.py b/homeassistant/components/yeelight/__init__.py
index 1408cb5670..aea98333c0 100644
--- a/homeassistant/components/yeelight/__init__.py
+++ b/homeassistant/components/yeelight/__init__.py
@@ -700,7 +700,7 @@ class YeelightEntity(Entity):
 
     async def async_update(self) -> None:
         """Update the entity."""
-        await self._device.async_update()
+        await self._device.async_update(force=True)
 
 
 async def _async_get_device(

?

@starkillerOG
Copy link
Contributor Author

@bdraco since polling is turned on, that would mean that the bulbs get extra update requests each scan_intervall (I don't know how many seconds).
That makes it easier for users to hit the rate-limit of 60 requests a minute, potentially causing disconnects and errors.

The polling is turnd on beacause I believe there were still some issues with older models that sometimes went unavailable and would not properly turn to available again (although that might have already been fixed, I don't know).

@bdraco
Copy link
Member

bdraco commented Nov 18, 2021

@bdraco since polling is turned on, that would mean that the bulbs get extra update requests each scan_intervall (I don't know how many seconds). That makes it easier for users to hit the rate-limit of 60 requests a minute, potentially causing disconnects and errors.

The polling is turnd on beacause I believe there were still some issues with older models that sometimes went unavailable and would not properly turn to available again (although that might have already been fixed, I don't know).

I think we can disable polling now since the library will take care of seeing available and unavailable properly now.

@starkillerOG starkillerOG changed the title Add yeelight force update service Yeelight disable polling Nov 19, 2021
@starkillerOG
Copy link
Contributor Author

@bdraco alright, I changed it to disabling polling and setting the update to force mode.

Dev automation moved this from By Code Owner to Reviewer approved Nov 19, 2021
@bdraco
Copy link
Member

bdraco commented Nov 19, 2021

Thanks @starkillerOG 馃憤

@bdraco bdraco merged commit 2b7bcd6 into home-assistant:dev Nov 19, 2021
Dev automation moved this from Reviewer approved to Done Nov 19, 2021
farmio pushed a commit to farmio/home-assistant that referenced this pull request Nov 20, 2021
Co-authored-by: J. Nick Koston <nick@koston.org>
@github-actions github-actions bot locked and limited conversation to collaborators Nov 20, 2021
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