diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Device.be b/lib/libesp32/berry_matter/src/embedded/Matter_Device.be index a909a7ccc..edc6e6320 100644 --- a/lib/libesp32/berry_matter/src/embedded/Matter_Device.be +++ b/lib/libesp32/berry_matter/src/embedded/Matter_Device.be @@ -110,7 +110,7 @@ class Matter_Device self.compute_pbkdf(self.passcode) # if no fabric is configured, automatically open commissioning at restart - if size(self.sessions.fabrics) == 0 + if self.sessions.count_active_fabrics() == 0 self.start_basic_commissioning() end end @@ -274,6 +274,7 @@ class Matter_Device # def start_commissioning_complete(session) tasmota.log("MTR: *** Commissioning complete ***", 2) + self.stop_basic_commissioning() # by default close commissioning when it's complete end diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Expirable.be b/lib/libesp32/berry_matter/src/embedded/Matter_Expirable.be index 6ced61193..9320f1949 100644 --- a/lib/libesp32/berry_matter/src/embedded/Matter_Expirable.be +++ b/lib/libesp32/berry_matter/src/embedded/Matter_Expirable.be @@ -168,6 +168,18 @@ class Matter_Expirable_list : list return f end + ############################################################# + # Count the number of persistable objects + def count_persistables() + var ret = 0 + var idx = 0 + while idx < size(self) + if self[idx]._persist ret += 1 end + idx += 1 + end + return ret + end + ############################################################# # every_second def every_second() diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be index 994343ffa..da143d52c 100644 --- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be +++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be @@ -269,7 +269,7 @@ class Matter_Plugin_Root : Matter_Plugin if attribute == 0x0003 # ---------- ConnectMaxTimeSeconds / uint8 ---------- return TLV.create_TLV(TLV.U1, 30) # 30 - value taking from example in esp-matter elif attribute == 0xFFFC # ---------- FeatureMap / map32 ---------- - return TLV.create_TLV(TLV.U4, 0) # 15s ??? TOOD what should we put here? + return TLV.create_TLV(TLV.U4, 0x04) # Put Eth for now which should work for any on-network end # ==================================================================================================== diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Session.be b/lib/libesp32/berry_matter/src/embedded/Matter_Session.be index 77fed188a..1e67a192f 100644 --- a/lib/libesp32/berry_matter/src/embedded/Matter_Session.be +++ b/lib/libesp32/berry_matter/src/embedded/Matter_Session.be @@ -601,6 +601,15 @@ class Matter_Session_Store end end + ############################################################# + # Count active fabrics + # + # Count the number of commissionned fabrics, i.e. persisted + def count_active_fabrics(f) + self.remove_expired() # clean before saving + return self.fabrics.count_persistables() + end + ############################################################# # add session def create_session(local_session_id, initiator_session_id) diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_UI.be b/lib/libesp32/berry_matter/src/embedded/Matter_UI.be index 7fc9329a0..e421cb7df 100644 --- a/lib/libesp32/berry_matter/src/embedded/Matter_UI.be +++ b/lib/libesp32/berry_matter/src/embedded/Matter_UI.be @@ -160,7 +160,7 @@ class Matter_UI webserver.content_send("

Passcode:

") webserver.content_send(string.format("", self.device.passcode)) webserver.content_send("

Distinguish id:

") - webserver.content_send(string.format("", self.device.discriminator)) + webserver.content_send(string.format("", self.device.discriminator)) webserver.content_send(string.format("

IPv4 only

", self.device.ipv4only ? " checked" : "")) webserver.content_send("

") webserver.content_send("

") @@ -314,6 +314,14 @@ class Matter_UI end # mtc0 = close, mtc1 = open commissioning + var fabrics_count = self.device.sessions.count_active_fabrics() + if fabrics_count == 0 + webserver.content_send(string.format("
%s
", "No active associaition")) + else + var plural = fabrics_count > 1 + webserver.content_send(string.format("
%s
", str(fabrics_count) + " active association" + (plural ? "s" : ""))) + end + webserver.content_send(string.format("