-
Notifications
You must be signed in to change notification settings - Fork 555
Fix error resubscribe #3105
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’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Fix error resubscribe #3105
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| name: matter-bridge | ||
| components: | ||
| - id: main | ||
| capabilities: | ||
| - id: firmwareUpdate | ||
| version: 1 | ||
| - id: refresh | ||
| version: 1 | ||
| categories: | ||
| - name: Bridges |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| -- SinuxSoft (c) 2025 | ||
| -- Licensed under the Apache License, Version 2.0 | ||
|
|
||
| local im = require "st.matter.interaction_model" | ||
| local log = require "log" | ||
|
|
||
| local utils = {} | ||
|
|
||
| -- Sends subscription request directly via device:send(), following the matter-switch pattern. | ||
| -- The default device:subscribe() reuses cached sessions, which causes timeout after hub | ||
| -- replacement because the hub Node ID changes and all sessions expire. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am surprised that we have not seen this issue in other devices during hub replace, but overall the changes make sense and I think we can move forward. I am still not confident in the root cause, but these changes are well understood and follow along with other examples (see our default lua libs handling, or see how subscriptions are handled the matter-switch driver for a comparison). So, I think we can move forward with these changes since they will resolve the issue now, but we should try to better understand the root cause and investigate as we move on. |
||
| -- device:send() creates a new session directly, so it works correctly after hub replacement. | ||
| function utils.make_subscribe(subscribed_attributes) | ||
| return function(device) | ||
| local subscribe_request = im.InteractionRequest(im.InteractionRequest.RequestType.SUBSCRIBE, {}) | ||
| for cap_id, attributes in pairs(subscribed_attributes) do | ||
| if device:supports_capability_by_id(cap_id) then | ||
| for _, attr in ipairs(attributes) do | ||
| local cluster_id = (attr._cluster and attr._cluster.ID) or attr.cluster | ||
| local attr_id = attr.ID or attr.attribute | ||
| local ib = im.InteractionInfoBlock(nil, cluster_id, attr_id) | ||
| subscribe_request:with_info_block(ib) | ||
| end | ||
| end | ||
| end | ||
| if #subscribe_request.info_blocks > 0 then | ||
| log.info_with({hub_logs=true}, string.format("[britzyhub] subscribe via send: %d blocks", #subscribe_request.info_blocks)) | ||
| device:send(subscribe_request) | ||
| end | ||
| end | ||
| end | ||
|
|
||
| return utils | ||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if the issue is that there was no subscription being sent my the bridge device if this
bridge_initfunction was not previously populated?@DongHoon-Ryu could you check if just removing this function causes the issue to occur again during hub replace? And then if adding it back fixes the issue?
The reason I am more suspicious of this is because the other subscribe logic above is very similar to what already exists in the subscribe function, so I'm not sure yet how that is providing a change in functionality.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I ran the test you asked for.
With bridge_init removed and the rest of the changes left in place, after a hub replace:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
HI @KyuminAhn, would you mind providing hub logs around the time of the error you are seeing in the app? Thank you
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@hcarter-775 Please check MTR-1083. If additional logs are needed, please leave a comment on the ticket.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for testing this!
Based on this, I believe this shows that the part of these changes that were fixing this issue are isolated to this file. Therefore, to move forward, I propose that we keep the changes in these files:
But I do not believe the changes in the sub drivers are neccessary, so we could remove the changes in the remaining files:
My comment on the ticket has more detail. I believe if we adjust the changes as I have mentioned above and re-test, we should see that the subscription is now handled properly without the need to add additional sub driver changes. Please let me know if you have any questions!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ctowns Problems continue to occur when only the files you suggested are modified. Please refer to the comments in MTR-1083.