diff --git a/PayfritBeacon/Provisioners/DXSmartProvisioner.swift b/PayfritBeacon/Provisioners/DXSmartProvisioner.swift index 5185694..dc46b12 100644 --- a/PayfritBeacon/Provisioners/DXSmartProvisioner.swift +++ b/PayfritBeacon/Provisioners/DXSmartProvisioner.swift @@ -173,6 +173,15 @@ final class DXSmartProvisioner: NSObject, BeaconProvisioner { for (index, (name, packet)) in commands.enumerated() { await diagnosticLog?.log("write", "[\(index + 1)/\(commands.count)] \(name) (\(packet.count) bytes)") + // SaveConfig (last command) causes beacon MCU to reboot — it never sends an ACK. + // Fire the BLE write and return immediately; the disconnect is expected. + if name == "SaveConfig" { + peripheral.writeValue(packet, for: writeChar, type: .withResponse) + await diagnosticLog?.log("write", "✅ [\(index + 1)/\(commands.count)] SaveConfig sent — beacon will reboot") + await diagnosticLog?.log("write", "✅ All commands written successfully") + return + } + // Retry each command up to 2 times — beacon BLE stack can be flaky var lastError: Error? for writeAttempt in 1...2 {