Skip to content

Commit

Permalink
Use extended PAN ID instead of mac extended addres to select thread n…
Browse files Browse the repository at this point in the history
…etwork (#3060)

<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->

---------

Co-authored-by: Stefan Agner <[email protected]>
  • Loading branch information
bgoncal and agners authored Sep 26, 2024
1 parent 9cbb6f9 commit 779dec5
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 5 deletions.
5 changes: 4 additions & 1 deletion Sources/App/WebView/WebViewExternalMessageHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -253,11 +253,14 @@ final class WebViewExternalMessageHandler {
private func matterComissioningHandler(incomingMessage: WebSocketMessage) {
if let preferredNetWorkMacExtendedAddress = incomingMessage.Payload?["mac_extended_address"] as? String,
let preferredNetWorkActiveOperationalDataset = incomingMessage
.Payload?["active_operational_dataset"] as? String {
.Payload?["active_operational_dataset"] as? String,
let preferredNetworkExtendedPANID = incomingMessage.Payload?["extended_pan_id"] as? String {
Current.settingsStore
.matterLastPreferredNetWorkMacExtendedAddress = preferredNetWorkMacExtendedAddress
Current.settingsStore
.matterLastPreferredNetWorkActiveOperationalDataset = preferredNetWorkActiveOperationalDataset
Current.settingsStore
.matterLastPreferredNetWorkExtendedPANID = preferredNetworkExtendedPANID

Current.Log
.verbose(
Expand Down
12 changes: 8 additions & 4 deletions Sources/Extensions/Matter/MatterRequestHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,16 @@ class MatterRequestHandler: MatterAddDeviceExtensionRequestHandler {
)
Current.Log
.verbose(
"threadScanResults: \(threadScanResults.map { "Network name: \($0.networkName), Mac extended address: \($0.extendedAddress.hexadecimal)" })"
"threadScanResults: \(threadScanResults.map { "Network name: \($0.networkName), Extended PAN ID: \($0.extendedPANID), Mac extended address: \($0.extendedAddress.hexadecimal)" })"
)

if let preferredNetworkMacExtendedAddress = Current.settingsStore.matterLastPreferredNetWorkMacExtendedAddress,
Current.Log
.verbose(
"Preferred Extended PAN ID: \(String(describing: UInt64(Current.settingsStore.matterLastPreferredNetWorkExtendedPANID ?? "", radix: 16)))"
)
if let matterLastPreferredNetWorkExtendedPANID = Current.settingsStore.matterLastPreferredNetWorkExtendedPANID,
let preferredExtendedPANID = UInt64(matterLastPreferredNetWorkExtendedPANID, radix: 16),
let selectedNetwork = threadScanResults.first(where: { result in
result.extendedAddress == preferredNetworkMacExtendedAddress.hexadecimal
result.extendedPANID == preferredExtendedPANID
}) {
Current.Log.verbose("Using selected thread network, name: \(selectedNetwork.networkName)")
return .network(extendedPANID: selectedNetwork.extendedPANID)
Expand Down
9 changes: 9 additions & 0 deletions Sources/Shared/Settings/SettingsStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@ public class SettingsStore {
}
}

public var matterLastPreferredNetWorkExtendedPANID: String? {
get {
keychain["matterLastPreferredNetWorkExtendedPANID"]
}
set {
keychain["matterLastPreferredNetWorkExtendedPANID"] = newValue
}
}

public func isLocationEnabled(for state: UIApplication.State) -> Bool {
let authorizationStatus: CLAuthorizationStatus

Expand Down

0 comments on commit 779dec5

Please sign in to comment.