{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":120253126,"defaultBranch":"dev","name":"zigpy","ownerLogin":"zigpy","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2018-02-05T04:04:46.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/30303551?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1713968725.0","currentOid":""},"activityList":{"items":[{"before":"c19617342de271b905016908932730e3320fc626","after":"038d57b9430ebc9e0f9c1c106440f7d27161f4e7","ref":"refs/heads/dev","pushedAt":"2024-05-09T15:37:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Allow OTA provider URL overrides (#1398)\n\n* Allow overriding the URL of any OTA provider\r\n\r\n* Move JSON schemas into a separate module\r\n\r\n* Support old IKEA URLs\r\n\r\n* Validate old IKEA images\r\n\r\n* Allow specifying override URLs in config\r\n\r\n* Bring coverage up to 100%","shortMessageHtmlLink":"Allow OTA provider URL overrides (#1398)"}},{"before":"313a211e4690b385308badb3dd313633741afd7e","after":"c19617342de271b905016908932730e3320fc626","ref":"refs/heads/dev","pushedAt":"2024-05-01T11:49:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Modify manufacturer IDs of Third Reality devices (#1389)\n\n* Get list of manufacturer IDs via url link\r\n\r\nChange-Id: I2ff2af50c65600d84b18d377f16666b23b60222c\r\n\r\n* Change manufacturer ids\r\n\r\nChange-Id: I47b1f3171f2f0543ebdc2bbe64fb01fb9900b48a\r\n\r\n* Modify format\r\n\r\nChange-Id: Ib86bf00ec924058ff2d67aa17ea4d597d57ee283\r\n\r\n* Keep the current one and add the new manufacturer ID\r\n\r\nChange-Id: I9812b3d4040671eabb73cce3a4d5cc53cf8d21b2\r\n\r\n* Fix whitespace (how did CI pass on this?)\r\n\r\n---------\r\n\r\nCo-authored-by: puddly <32534428+puddly@users.noreply.github.com>","shortMessageHtmlLink":"Modify manufacturer IDs of Third Reality devices (#1389)"}},{"before":"18a7add71a546ba009e811c153a61c60d7f0987a","after":"313a211e4690b385308badb3dd313633741afd7e","ref":"refs/heads/dev","pushedAt":"2024-04-17T16:39:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Inovelli - Update Firmware URL For ZHA New Update Method (#1386)\n\n* Inovelli - Update Firmware URL For ZHA New Update Method\r\n\r\n* Update test_ota_providers.py","shortMessageHtmlLink":"Inovelli - Update Firmware URL For ZHA New Update Method (#1386)"}},{"before":"9ee4e2a71af46eb625c67f8469e3e1b812c513a5","after":"18a7add71a546ba009e811c153a61c60d7f0987a","ref":"refs/heads/dev","pushedAt":"2024-04-12T16:42:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Merge `in_clusters` and `out_clusters` in the database (#1381)\n\n* Merge `in_clusters` and `out_clusters` in the database\r\n\r\n* Fix `_load_unsupported_attributes`\r\n\r\n* Swap `Server` and `Client` in migration\r\n\r\n* Fix ordering of `unsupported_attribute_added` event parameters\r\n\r\n* Attach the DB listener to client clusters\r\n\r\n* Update zigpy/endpoint.py\r\n\r\nCo-authored-by: TheJulianJES \r\n\r\n* Extend the unit tests a little to ensure both cluster types are tested\r\n\r\n---------\r\n\r\nCo-authored-by: TheJulianJES ","shortMessageHtmlLink":"Merge in_clusters and out_clusters in the database (#1381)"}},{"before":"24d3a00fbbf952b96d1216547275a5cce4e4cf0e","after":"9ee4e2a71af46eb625c67f8469e3e1b812c513a5","ref":"refs/heads/dev","pushedAt":"2024-04-11T15:50:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"TheJulianJES","name":"TheJulianJES","path":"/TheJulianJES","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6409465?s=80&v=4"},"commit":{"message":"Support Codecov v4 changes (#1380)\n\nPass `CODECOV_TOKEN` to shared workflow","shortMessageHtmlLink":"Support Codecov v4 changes (#1380)"}},{"before":"07ed6985325ef4ef8be986a8c572e91d44a9c47d","after":"24d3a00fbbf952b96d1216547275a5cce4e4cf0e","ref":"refs/heads/dev","pushedAt":"2024-03-27T16:33:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Add quirk v2 location information to CustomDeviceV2 (#1367)\n\n* Add quirk v2 location information to CustomDeviceV2\r\n\r\n* contain in quirks metadata only\r\n\r\n* fix CI\r\n\r\n* try this in CI\r\n\r\n* let's see what is in the stack in CI\r\n\r\n* try with inspect","shortMessageHtmlLink":"Add quirk v2 location information to CustomDeviceV2 (#1367)"}},{"before":"6db73858c17b960f32ad52150b14925405d9afea","after":"07ed6985325ef4ef8be986a8c572e91d44a9c47d","ref":"refs/heads/dev","pushedAt":"2024-03-27T16:32:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Add release notes and image source to OTA metadata (#1359)\n\n* Keep track of the source of every OTA image\r\n\r\n* Add `release_notes`\r\n\r\n* Strip off image metadata set to `None`\r\n\r\n* Add `release_notes` to JSON schema\r\n\r\n* Fix unit tests\r\n\r\n* Fix name of ignored OTA directory in `.gitignore`","shortMessageHtmlLink":"Add release notes and image source to OTA metadata (#1359)"}},{"before":"adb352e5ba8cab8c378b71610708bd84c02e76b3","after":"6db73858c17b960f32ad52150b14925405d9afea","ref":"refs/heads/dev","pushedAt":"2024-03-27T16:32:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Ensure `Debouncer` works even if we have a low resolution clock (#1368)","shortMessageHtmlLink":"Ensure Debouncer works even if we have a low resolution clock (#1368)"}},{"before":"3d1b60c9181fb40638eaf3e70c5815967b07300c","after":"adb352e5ba8cab8c378b71610708bd84c02e76b3","ref":"refs/heads/dev","pushedAt":"2024-03-27T16:32:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"fix: convert CONF_OTA_ADVANCED_DIR to a Path (#1371)","shortMessageHtmlLink":"fix: convert CONF_OTA_ADVANCED_DIR to a Path (#1371)"}},{"before":"377c3031cf1a9b2c6a377e034f24b09ed39ccf6d","after":"3d1b60c9181fb40638eaf3e70c5815967b07300c","ref":"refs/heads/dev","pushedAt":"2024-03-16T21:36:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Downgrade default Python version from 3.9.18 to 3.9.15 (#1369)","shortMessageHtmlLink":"Downgrade default Python version from 3.9.18 to 3.9.15 (#1369)"}},{"before":"5253ddbb318d216d9eaad036f25130d37a7195a9","after":"377c3031cf1a9b2c6a377e034f24b09ed39ccf6d","ref":"refs/heads/dev","pushedAt":"2024-03-11T21:44:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Clean up pre commit and update types (#1364)\n\n* Update precommit and fix some types\r\n\r\n* remove ruff dep\r\n\r\n* remove ruff\r\n\r\n* oops\r\n\r\n* fix file\r\n\r\n* test\r\n\r\n* update CI","shortMessageHtmlLink":"Clean up pre commit and update types (#1364)"}},{"before":"b8c989ecf6fa2650b5f4ed939d593c3304067ac8","after":"5253ddbb318d216d9eaad036f25130d37a7195a9","ref":"refs/heads/dev","pushedAt":"2024-03-08T18:45:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmulcahey","name":"David F. Mulcahey","path":"/dmulcahey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1335687?s=80&v=4"},"commit":{"message":"Streamline quirks v2 classes and add validation (#1362)\n\n* Streamline quirks v2 classes and add validation\r\n\r\n* move kw_only to class to see if CI is happier about it\r\n\r\n* dataclasses -> attrs\r\n\r\n* mypy lies so we disable the checks on the usage until we drop old pythons","shortMessageHtmlLink":"Streamline quirks v2 classes and add validation (#1362)"}},{"before":"a87b23606c851e145b99a3bc5589429db72551e1","after":"b8c989ecf6fa2650b5f4ed939d593c3304067ac8","ref":"refs/heads/dev","pushedAt":"2024-03-04T21:09:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Download blobs at runtime, during testing (#1358)","shortMessageHtmlLink":"Download blobs at runtime, during testing (#1358)"}},{"before":"6062e41d28ad99bafa9dd803cab1c3ae4a8fe6ba","after":"a87b23606c851e145b99a3bc5589429db72551e1","ref":"refs/heads/dev","pushedAt":"2024-03-04T19:15:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Validate the JSON of all OTA providers (#1354)\n\n* Validate the JSON of all OTA providers\r\n\r\n* Fully consume JSON during testing\r\n\r\n* Restrict by Ledvance model name\r\n\r\n* Finish consuming JSON during testing","shortMessageHtmlLink":"Validate the JSON of all OTA providers (#1354)"}},{"before":"58285865a6a6e544ec2dc570089a098cf7d4c1c7","after":"6062e41d28ad99bafa9dd803cab1c3ae4a8fe6ba","ref":"refs/heads/dev","pushedAt":"2024-03-03T14:59:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmulcahey","name":"David F. Mulcahey","path":"/dmulcahey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1335687?s=80&v=4"},"commit":{"message":"Quirks v2 updates (#1350)\n\n* fix type warnings\r\n\r\n* make quirk_metadata public\r\n\r\n* implement contains and remove for v2 quirks in the registry\r\n\r\n* docstrings","shortMessageHtmlLink":"Quirks v2 updates (#1350)"}},{"before":"5fc1b9e28322b72d26d71b34edeee457f89bd942","after":"58285865a6a6e544ec2dc570089a098cf7d4c1c7","ref":"refs/heads/dev","pushedAt":"2024-03-03T14:59:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmulcahey","name":"David F. Mulcahey","path":"/dmulcahey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1335687?s=80&v=4"},"commit":{"message":"Attributes can also be called by names. (#1353)","shortMessageHtmlLink":"Attributes can also be called by names. (#1353)"}},{"before":"19f32239d893efdf8b1cdc3c4542795fe2d37f42","after":"5fc1b9e28322b72d26d71b34edeee457f89bd942","ref":"refs/heads/dev","pushedAt":"2024-03-03T14:57:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmulcahey","name":"David F. Mulcahey","path":"/dmulcahey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1335687?s=80&v=4"},"commit":{"message":"Fix manufacturer name filter in OTAs from a Z2M index (#1352)","shortMessageHtmlLink":"Fix manufacturer name filter in OTAs from a Z2M index (#1352)"}},{"before":"a0da108af9e2d8d9699d8220afcc7b21db942201","after":"19f32239d893efdf8b1cdc3c4542795fe2d37f42","ref":"refs/heads/dev","pushedAt":"2024-03-01T21:31:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Fix Inovelli JSON version format (#1349)","shortMessageHtmlLink":"Fix Inovelli JSON version format (#1349)"}},{"before":"fc06bdcec112d8975c058c90ce0815b8acaf0a13","after":"a0da108af9e2d8d9699d8220afcc7b21db942201","ref":"refs/heads/dev","pushedAt":"2024-03-01T21:31:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Fix replacement device calculation in quirks v2 (#1348)","shortMessageHtmlLink":"Fix replacement device calculation in quirks v2 (#1348)"}},{"before":"1853ce109de5d1528333e9c78c325131f8aeed3a","after":"fc06bdcec112d8975c058c90ce0815b8acaf0a13","ref":"refs/heads/dev","pushedAt":"2024-02-28T18:16:00.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"OTA reliability improvements (#1346)\n\n* Read the OTA file version\r\n\r\n* Bump OTA \"no progress\" timeout to 30s\r\n\r\n* Retry reading the current file version multiple times\r\n\r\n* Do not call the OTA progress callback if we are no longer upgrading\r\n\r\n* Centralize the `if device.ota_in_progress` branch\r\n\r\n* Test reading the OTA file version after upgrading","shortMessageHtmlLink":"OTA reliability improvements (#1346)"}},{"before":"d9c1c1a36c40f46bab84f81e2fac8eb8bc55708e","after":"1853ce109de5d1528333e9c78c325131f8aeed3a","ref":"refs/heads/dev","pushedAt":"2024-02-26T19:05:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmulcahey","name":"David F. Mulcahey","path":"/dmulcahey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1335687?s=80&v=4"},"commit":{"message":"Add KeepAlive cluster definition (#1345)\n\n* Add KeepAlive cluster definition\r\n\r\n* doc strings","shortMessageHtmlLink":"Add KeepAlive cluster definition (#1345)"}},{"before":"38f233a2261e34d80c145018c8cecaa8981fa024","after":"d9c1c1a36c40f46bab84f81e2fac8eb8bc55708e","ref":"refs/heads/dev","pushedAt":"2024-02-22T20:12:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmulcahey","name":"David F. Mulcahey","path":"/dmulcahey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1335687?s=80&v=4"},"commit":{"message":"Implement packet debouncing (#1338)\n\n* Create a packet debouncer\r\n\r\n* Ensure packets are hashable\r\n\r\n* Ignore LQI and RSSI when debouncing\r\n\r\n* Ignore packet-level `tsn` as well\r\n\r\n* Fix existing unit tests\r\n\r\n* Add a unit test for device-level debouncing\r\n\r\n* Increase test coverage to 100%","shortMessageHtmlLink":"Implement packet debouncing (#1338)"}},{"before":"40b7000b18d893221ea25c511a6194cd50429419","after":"38f233a2261e34d80c145018c8cecaa8981fa024","ref":"refs/heads/dev","pushedAt":"2024-02-22T20:07:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmulcahey","name":"David F. Mulcahey","path":"/dmulcahey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1335687?s=80&v=4"},"commit":{"message":"Quirks V2 (#1329)\n\n* example of quirks v2\r\n\r\nadd entity to example\r\n\r\n* add matcher example\r\n\r\n* comparison test\r\n\r\n* small cleanup\r\n\r\n* add support for custom device classes\r\n\r\n* tweak\r\n\r\n* add configuration hooks and type metadata options for clusters\r\n\r\n* make customdevicev2 extend customdevice\r\n\r\n* black\r\n\r\n* clean up metadata\r\n\r\n* make less verbose\r\n\r\n* move quirks v2 to their own module\r\n\r\n* pylint ignores\r\n\r\n* fix pylint disables after formatting\r\n\r\n* support matching a single v2 quirk to multiple devices\r\n\r\n* copy cache for clusters when quirking an endpoint\r\n\r\n* add zcl command button metadata\r\n\r\n* only copy attr cache for CustomDeviceV2\r\n\r\n* filter zdo during custom configuration\r\n\r\n* sensor metadata\r\n\r\n* remove patches until I can figure it out\r\n\r\n* fix cluster attr cache copy and device triggers\r\n\r\n* coverage\r\n\r\n* remove unused stuff\r\n\r\n* clean up pylint hints\r\n\r\n* add command button\r\n\r\n* format\r\n\r\n* add support for overridding node descriptor and skipping configuration\r\n\r\n* support HA device class, state class and units\r\n\r\n* add support for different off and on values for switch\r\n\r\n* initially_disabled and attribute_initialized_from_cache\r\n\r\n* add translation_key\r\n\r\n* pylint directive cleanup\r\n\r\n* add unit to sensor\r\n\r\n* remove decimals from sensor","shortMessageHtmlLink":"Quirks V2 (#1329)"}},{"before":"7b62d4f3d6d23d793a9235861a6987079bb1109c","after":"40b7000b18d893221ea25c511a6194cd50429419","ref":"refs/heads/dev","pushedAt":"2024-02-22T20:04:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmulcahey","name":"David F. Mulcahey","path":"/dmulcahey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1335687?s=80&v=4"},"commit":{"message":"OTA v2: provider and metadata rewrite (#1340)\n\n* WIP\r\n\r\n* WIP: Reorganize back into classes\r\n\r\n* WIP: Update config\r\n\r\n* WIP: Always bundle OTA metadata and images\r\n\r\n* WIP: Actually limit the OTA block size\r\n\r\n* WIP: Reorder specificity calculation\r\n\r\n* WIP: Fix type annotations\r\n\r\n* WIP: Remove incompatible unit tests\r\n\r\n* WIP: Emit the current file version in the `device_ota_update_available` event\r\n\r\n* WIP: Update all use of `BaseOTAImage` to take `OtaImageWithMetadata`\r\n\r\n* WIP: Create a `attribute_cleared` event to purge attributes from the DB\r\n\r\n* Write a unit test\r\n\r\n* WIP: Clear the current file version when the update succeeds\r\n\r\n* WIP: Fix OTA config\r\n\r\n* WIP: Log when registering a new OTA provider\r\n\r\n* Shorten OTA image `repr`\r\n\r\n* WIP: Runtime test\r\n\r\n* WIP: Ensure tuples are used instead of lists\r\n\r\n* Combine concurrent downloads for metadata and firmware\r\n\r\n* WIP: Fix/remove most unit tests\r\n\r\n* Allow globally disabling OTA\r\n\r\n* Pass the attribute ID when clearing attribute after a successful update\r\n\r\n* If the attribute doesn't exist, don't pop anything\r\n\r\n* Fix remaining unit tests\r\n\r\n* Improve test coverage of `util`\r\n\r\n* Move OTA tests into a subfolder\r\n\r\n* Begin testing OTA providers\r\n\r\n* Test Ledvance\r\n\r\n* Test Sonoff\r\n\r\n* Test Inovelli and ThirdReality\r\n\r\n* Update remote provider format\r\n\r\n* Test Salus provider\r\n\r\n* Rename `zigpy.ota.provider` to `zigpy.ota.providers`\r\n\r\n* Standardize names within provider tests\r\n\r\n* Handle Salus images not having any metadata beyond model names\r\n\r\n* Skip `tests` folder for codespell\r\n\r\n* Use correct syntax for codespell `skip`\r\n\r\n* Drop `ImageKey`\r\n\r\n* Add tests for `OtaImageWithMetadata` and image matching\r\n\r\n* Make unit test actually test the attribute being cleared\r\n\r\n* Test `cv_json_file`\r\n\r\n* Test metadata fetching\r\n\r\n* Test subelement repr shortening\r\n\r\n* Test OTA image length inconsistency error\r\n\r\n* Test checksum and file size checks\r\n\r\n* Test local file provider\r\n\r\n* Test image contents in local file provider\r\n\r\n* Make sure `HeaderString` can survive roundtrip encoding\r\n\r\nFix `HeaderString` tests\r\n\r\n* Test fetching an IKEA image\r\n\r\n* Unit test device matching\r\n\r\n* Unit test provider caching\r\n\r\n* Unit test all non-failure branches\r\n\r\n* Make tests work on 3.8\r\n\r\n* Test broken OTA providers and images\r\n\r\n* Test invalid MD5 branch for Salus tarballs\r\n\r\n* Fix unit tests for 3.8, again\r\n\r\n* Mark unit test JSON files as generated, not code\r\n\r\n* Increase test coverage\r\n\r\n* Revert \"Mark unit test JSON files as generated, not code\"\r\n\r\nThis reverts commit a4b0758e3bdb229cc8e56f891d3ee8a85898d41e.\r\n\r\n* Abort any in-progress OTA update if we are not expecting it\r\n\r\n* Implement a method to broadcast an OTA notification network-wide\r\n\r\n* Periodically send a network-wide broadcast to get devices to check in\r\n\r\n* Add some tests\r\n\r\n* Bring coverage back to 100%\r\n\r\n* Change the OTA scan interval to once every 3.9 hours to not coincide with topology\r\n\r\n* Set the jitter such that only 15 devices will check in per broadcast\r\n\r\n* End OTA if the image is no longer compatible by the time the OTA starts\r\n\r\n* Implement `ReschedulableTimeout`\r\n\r\n* Abort OTA if there has been no progress in 10s\r\n\r\n* Replace the metadata version as well when sending a forced upgrade\r\n\r\n* Test stalling status\r\n\r\n* Fix logic for timer rescheduling\r\n\r\n* Fix missing import in manager unit test\r\n\r\n* Ensure manager tests use a device compatible with the active image","shortMessageHtmlLink":"OTA v2: provider and metadata rewrite (#1340)"}},{"before":"4b77fc267d3c3edffae2e42cc9c17f0f85afc76e","after":"7b62d4f3d6d23d793a9235861a6987079bb1109c","ref":"refs/heads/dev","pushedAt":"2024-02-22T20:02:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmulcahey","name":"David F. Mulcahey","path":"/dmulcahey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1335687?s=80&v=4"},"commit":{"message":"Bump aiosqlite to 0.20.0 (#1343)\n\nchangelog: https://github.com/omnilib/aiosqlite/blob/HEAD/CHANGELOG.md","shortMessageHtmlLink":"Bump aiosqlite to 0.20.0 (#1343)"}},{"before":"0eb276e18cc3f34feae5190b3ba8947ac4073d3c","after":"4b77fc267d3c3edffae2e42cc9c17f0f85afc76e","ref":"refs/heads/dev","pushedAt":"2024-02-17T18:46:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Allow clearing attributes from the cache (#1341)\n\n* WIP: Create a `attribute_cleared` event to purge attributes from the DB\r\n\r\n* Write a unit test\r\n\r\n* If the attribute doesn't exist, don't pop anything\r\n\r\n* Make unit test actually test the attribute being cleared","shortMessageHtmlLink":"Allow clearing attributes from the cache (#1341)"}},{"before":"6aeb8a6816585a4bda67e9ea1b125568c18fa702","after":"0eb276e18cc3f34feae5190b3ba8947ac4073d3c","ref":"refs/heads/dev","pushedAt":"2024-02-17T18:46:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Fix invalid relay lists (#1339)\n\n* Filter out invalid relays\r\n\r\n* Add a unit test\r\n\r\n* Fix CI for 3.8","shortMessageHtmlLink":"Fix invalid relay lists (#1339)"}},{"before":"7877af556c0e607fb7a04e8adc80edf22d4cc376","after":"6aeb8a6816585a4bda67e9ea1b125568c18fa702","ref":"refs/heads/dev","pushedAt":"2024-02-06T23:32:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Temporarily prevent OTA file provider from being used without an extra key (#1337)\n\n* Only enable OTA file providers if you pass in a magic string\r\n\r\n* Add unit tests","shortMessageHtmlLink":"Temporarily prevent OTA file provider from being used without an extr…"}},{"before":"43b36492e37ef7ba3c681200f936f6a83062af3a","after":"7877af556c0e607fb7a04e8adc80edf22d4cc376","ref":"refs/heads/dev","pushedAt":"2024-02-06T13:27:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Handle invalid commands without throwing an exception (#1336)","shortMessageHtmlLink":"Handle invalid commands without throwing an exception (#1336)"}},{"before":"31ff197c3c66bd82108ae29a2d6c9e19d3ddcd7c","after":"43b36492e37ef7ba3c681200f936f6a83062af3a","ref":"refs/heads/dev","pushedAt":"2024-02-05T22:28:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"puddly","name":null,"path":"/puddly","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/32534428?s=80&v=4"},"commit":{"message":"Fix ZDO command logging warnings when OTA is active (#1335)","shortMessageHtmlLink":"Fix ZDO command logging warnings when OTA is active (#1335)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAERcPoUwA","startCursor":null,"endCursor":null}},"title":"Activity · zigpy/zigpy"}