Skip to content

Commit 952811b

Browse files
authored
Matter add option to disable bridge mode (#18992)
1 parent 504b51a commit 952811b

7 files changed

+4895
-4843
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file.
66
## [13.0.0.1]
77
### Added
88
- Command ``Delay -1`` to wait until next second (#18984)
9+
- Matter add option to disable bridge mode
910

1011
### Breaking Changed
1112
- Berry `bool( [] )` and `bool( {} )` now evaluate as `false` (#18986)

lib/libesp32/berry_matter/src/embedded/Matter_Device.be

+4-1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ class Matter_Device
6363
var root_discriminator # as `int`
6464
var root_passcode # as `int`
6565
var ipv4only # advertize only IPv4 addresses (no IPv6)
66+
var disable_bridge_mode # default is bridge mode, this flag disables this mode for some non-compliant controllers
6667
var next_ep # next endpoint to be allocated for bridge, start at 1
6768
# context for PBKDF
6869
var root_iterations # PBKDF number of iterations
@@ -92,6 +93,7 @@ class Matter_Device
9293
self.next_ep = 1 # start at endpoint 1 for dynamically allocated endpoints
9394
self.root_salt = crypto.random(16)
9495
self.ipv4only = false
96+
self.disable_bridge_mode = false
9597
self.load_param()
9698

9799
self.sessions = matter.Session_Store(self)
@@ -628,7 +630,7 @@ class Matter_Device
628630
import json
629631
self.update_remotes_info() # update self.plugins_config_remotes
630632

631-
var j = format('{"distinguish":%i,"passcode":%i,"ipv4only":%s,"nextep":%i', self.root_discriminator, self.root_passcode, self.ipv4only ? 'true':'false', self.next_ep)
633+
var j = format('{"distinguish":%i,"passcode":%i,"ipv4only":%s,"disable_bridge_mode":%s,"nextep":%i', self.root_discriminator, self.root_passcode, self.ipv4only ? 'true':'false', self.disable_bridge_mode ? 'true':'false', self.next_ep)
632634
if self.plugins_persist
633635
j += ',"config":'
634636
j += json.dump(self.plugins_config)
@@ -693,6 +695,7 @@ class Matter_Device
693695
self.root_discriminator = j.find("distinguish", self.root_discriminator)
694696
self.root_passcode = j.find("passcode", self.root_passcode)
695697
self.ipv4only = bool(j.find("ipv4only", false))
698+
self.disable_bridge_mode = bool(j.find("disable_bridge_mode", false))
696699
self.next_ep = j.find("nextep", self.next_ep)
697700
self.plugins_config = j.find("config")
698701
if self.plugins_config != nil

lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Device.be

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class Matter_Plugin_Device : Matter_Plugin
104104
d1.add_TLV(1, TLV.U2, types[dt]) # Revision
105105
end
106106
# if fabric is not Alexa
107-
if self.NON_BRIDGE_VENDOR.find(session.get_admin_vendor()) == nil
107+
if (self.NON_BRIDGE_VENDOR.find(session.get_admin_vendor()) == nil) && (!self.device.disable_bridge_mode)
108108
var d1 = dtl.add_struct()
109109
d1.add_TLV(0, TLV.U2, 0x0013) # DeviceType
110110
d1.add_TLV(1, TLV.U2, 1) # Revision

lib/libesp32/berry_matter/src/embedded/Matter_UI.be

+3
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ class Matter_UI
197197
webserver.content_send(f"<input type='number' min='0' max='4095' name='discriminator' value='{self.device.root_discriminator:i}'>")
198198
var ipv4only_checked = self.device.ipv4only ? " checked" : ""
199199
webserver.content_send(f"<p><input type='checkbox' name='ipv4'{ipv4only_checked}>IPv4 only</p>")
200+
var disable_bridge_mode_checked = self.device.disable_bridge_mode ? " checked" : ""
201+
webserver.content_send(f"<p><input type='checkbox' name='nobridge'{disable_bridge_mode_checked}>Disable bridge mode (not recommended)</p>")
200202
webserver.content_send("<p></p><button name='passcode' class='button bgrn'>Change</button></form></p>"
201203
"<p></p></fieldset><p></p>")
202204

@@ -755,6 +757,7 @@ class Matter_UI
755757
self.device.root_discriminator = int(webserver.arg("discriminator"))
756758
end
757759
self.device.ipv4only = webserver.arg("ipv4") == 'on'
760+
self.device.disable_bridge_mode = webserver.arg("nobridge") == 'on'
758761
self.device.save_param()
759762

760763
#- and force restart -#

0 commit comments

Comments
 (0)