<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Matter attribute update: is there a way to know when the report has been sent?</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/127334/matter-attribute-update-is-there-a-way-to-know-when-the-report-has-been-sent</link><description>Hi everyone, I’m updating a Matter attribute: 
 
 I’d like to know if there is any callback or event that confirms when the attribute report has actually been sent by the Matter stack. I don’t need confirmation from the controller; I only need to know</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 23 Mar 2026 14:57:19 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/127334/matter-attribute-update-is-there-a-way-to-know-when-the-report-has-been-sent" /><item><title>RE: Matter attribute update: is there a way to know when the report has been sent?</title><link>https://devzone.nordicsemi.com/thread/563902?ContentTypeID=1</link><pubDate>Mon, 23 Mar 2026 14:57:19 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6c9069f2-746d-495e-8d3d-b747757e1e02</guid><dc:creator>AHaug</dc:creator><description>&lt;p&gt;Hi again,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Yeah there seems to be no direct equivalent for a callback for an application level &amp;quot;report sent&amp;quot;. &lt;/p&gt;
&lt;p&gt;The best I have is the previously mentioned doc page and for for you to evaluate some internal hooks that might be usable or to use the IDC State Observer which I think should be&amp;nbsp;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Internal hook&lt;/th&gt;
&lt;th&gt;Where it fires&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ReadHandler::Observer::OnSubscriptionReportSent()&lt;/code&gt; (ReadHandler.cpp:361)&lt;/td&gt;
&lt;td&gt;Right after &lt;code&gt;SendMessage()&lt;/code&gt; returns OK&lt;/td&gt;
&lt;td&gt;Packet handed to transport layer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Engine::OnReportConfirm()&lt;/code&gt; (Engine.cpp:1153)&lt;/td&gt;
&lt;td&gt;After the controller sends back a &lt;code&gt;StatusResponse&lt;/code&gt; (subscription) or immediately (read)&lt;/td&gt;
&lt;td&gt;Controller acknowledged receipt&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;Neither is accessible to application code: &lt;code&gt;OnSubscriptionReportSent&lt;/code&gt; is consumed by &lt;code&gt;ReportSchedulerImpl&lt;/code&gt; (single observer slot), and &lt;code&gt;OnReportConfirm&lt;/code&gt; is purely internal engine state.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;W.r.t the IDC State Observer, here&amp;#39;s a summary of how the IDC state observer should work (if I understood it correct when reading through it ). See&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;a href="https://docs.nordicsemi.com/bundle/ncs-3.2.4/page/nrf/protocols/matter/getting_started/low_power_configuration.html"&gt;https://docs.nordicsemi.com/bundle/ncs-3.2.4/page/nrf/protocols/matter/getting_started/low_power_configuration.html&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;A pseudo-code example is below:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="text"&gt;#include &amp;lt;app/icd/server/ICDManager.h&amp;gt;
#include &amp;lt;app/icd/server/ICDStateObserver.h&amp;gt;

class PowerSourceICDObserver : public chip::app::ICDStateObserver
{
public:
    void OnEnterActiveMode() override {}
    void OnTransitionToIdle() override {}   // ~ICD_ACTIVE_TIME_JITTER_MS before idle
    void OnICDModeChange()   override {}

    void OnEnterIdleMode() override
    {
        // All pending reports have been confirmed by the stack.
        // Safe to power down.
        TriggerPowerDown();
    }
};

// During application init:
static PowerSourceICDObserver sICDObserver;
chip::app::ICDManager::GetInstance().RegisterObserver(&amp;amp;sICDObserver);&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Reporting engine schedules a run → &lt;code&gt;ICDNotifier::NotifySubscriptionReport()&lt;/code&gt; keeps the device in Active mode&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Engine::BuildAndSendSingleReportData()&lt;/code&gt; sends the &lt;code&gt;ReportData&lt;/code&gt; message&lt;/li&gt;
&lt;li&gt;For subscriptions, the stack transitions &lt;code&gt;ReadHandler&lt;/code&gt; to &lt;code&gt;AwaitingReportResponse&lt;/code&gt; and waits for the controller&amp;#39;s &lt;code&gt;StatusResponse&lt;/code&gt; — only then does &lt;code&gt;OnReportConfirm()&lt;/code&gt; decrement &lt;code&gt;mNumReportsInFlight&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Once all in-flight reports are confirmed and no dirty attributes remain, the Active mode timer expires&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OnTransitionToIdle()&lt;/code&gt; fires (last chance to extend) → if nothing extends → &lt;code&gt;OnEnterIdleMode()&lt;/code&gt; fires&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span&gt;&lt;code&gt;OnEnterIdleMode()&lt;/code&gt; is your safe power-down point.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;I&amp;#39;ve not used either, but they look to be something that could fit your use case. However it is up to you to evaluate this.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Kind regards,&lt;br /&gt;Andreas&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Matter attribute update: is there a way to know when the report has been sent?</title><link>https://devzone.nordicsemi.com/thread/563469?ContentTypeID=1</link><pubDate>Tue, 17 Mar 2026 14:32:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6fd7b8bf-5688-4194-8412-cc9765526192</guid><dc:creator>AHaug</dc:creator><description>&lt;p&gt;Hi,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This is just a heads up that I&amp;#39;ve not forgotten you and that I&amp;#39;ve asked for some input internally if there exists a callback function that handles this or not.&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;br /&gt;Andreas&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Matter attribute update: is there a way to know when the report has been sent?</title><link>https://devzone.nordicsemi.com/thread/562936?ContentTypeID=1</link><pubDate>Tue, 10 Mar 2026 14:42:50 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:41ec9f8a-2dd4-445d-b944-1fce0f3125da</guid><dc:creator>AHaug</dc:creator><description>&lt;p&gt;Noted, thanks for elaborating. I will have to look a bit more around then. I&amp;#39;m aiming to give you a follow up to this within a day or two.&lt;/p&gt;
&lt;p&gt;In advance, thanks for the patience&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;br /&gt;Andreas&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Matter attribute update: is there a way to know when the report has been sent?</title><link>https://devzone.nordicsemi.com/thread/562840?ContentTypeID=1</link><pubDate>Mon, 09 Mar 2026 14:58:40 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:575153ad-2dfd-4a2f-ad73-0e8fefe23155</guid><dc:creator>OldCRT</dc:creator><description>&lt;p&gt;Hi,&lt;br /&gt;Thanks for the suggestion!&lt;/p&gt;
&lt;p&gt;I had already looked at that part of the documentation, but unfortunately it does not solve the specific requirement I have in my application.&lt;/p&gt;
&lt;p&gt;In my case the device is battery powered and the flow is roughly:&lt;/p&gt;
&lt;p&gt;- Wake up&lt;br /&gt;- Acquire from sensor&lt;br /&gt;- Update a Matter attribute (with Set())&lt;br /&gt;- Ensure the update has actually been sent by the Matter stack (currenty ensured by sleep)&lt;br /&gt;- Enter power-off (witouth any retention)&lt;/p&gt;
&lt;p&gt;Currently the attribute is updated using:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;Clusters::PowerSource::Attributes::BatVoltage::Set(kPositionEndpoint, static_cast&amp;lt;uint32_t&amp;gt;(mv), MarkAttributeDirty::kYes);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The problem is that this only marks the attribute as dirty in the data model and lets the Matter reporting engine send the report asynchronously if a subscription exists.&lt;/p&gt;
&lt;p&gt;The section you referenced mainly describes ZCL callbacks used to interact with the Matter data model. However, those callbacks operate at the data model layer, not at the reporting / transport layer.&lt;/p&gt;
&lt;p&gt;Because of that, they do not provide a callback or notification when the stack has finished sending the message.&lt;/p&gt;
&lt;p&gt;Since the reporting engine works asynchronously, the device might power off before the report has actually been transmitted.&lt;/p&gt;
&lt;p&gt;At the moment the only workaround is something like:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;k_sleep(K_SECONDS(10));&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;before entering power-off, which is obviously not ideal for a low-power device.&lt;br /&gt;What I am looking for instead is something like: a callback when the reporting engine finishes sending a report, or confirmation that the report has been handed off to the transport layer so the device can safely power down without relying on a fixed delay.&lt;/p&gt;
&lt;p&gt;If there is an API or callback in the Matter stack that indicates report transmission completion, that would solve the problem cleanly. Otherwise I may need to redesign the flow (for example using events + an application-level acknowledgement).&lt;/p&gt;
&lt;p&gt;Any other suggestions on how to reliably detect when a report has actually been transmitted would be greatly appreciated.&lt;/p&gt;
&lt;p&gt;Kind regards.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Matter attribute update: is there a way to know when the report has been sent?</title><link>https://devzone.nordicsemi.com/thread/562835?ContentTypeID=1</link><pubDate>Mon, 09 Mar 2026 14:19:13 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:15d671eb-8586-451a-acf0-4a310f778010</guid><dc:creator>AHaug</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;If I read your request, what your asking for is basically some kind of acknowlegde sent back after a report has been sent by the stack and the change has taken place on a device.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;If so, have you had a look at&amp;nbsp;&lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/protocols/matter/getting_started/matter_api.html#interacting_with_matter_data_model"&gt;https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/protocols/matter/getting_started/matter_api.html#interacting_with_matter_data_model&lt;/a&gt;&amp;nbsp;if this fits your needs?&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;br /&gt;Andreas&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>