Clean up if setup failes for nuki
parent
c1da14fd55
commit
7b1b5620e1
|
|
@ -129,7 +129,6 @@ void IntegrationPluginNuki::discoverThings(ThingDiscoveryInfo *info)
|
|||
m_bluetoothAdapter->startDiscovering();
|
||||
|
||||
QTimer::singleShot(5000, info, [this, info]() { onBluetoothDiscoveryFinished(info); });
|
||||
|
||||
}
|
||||
|
||||
void IntegrationPluginNuki::startPairing(ThingPairingInfo *info)
|
||||
|
|
@ -159,14 +158,48 @@ void IntegrationPluginNuki::confirmPairing(ThingPairingInfo *info, const QString
|
|||
return info->finish(Thing::ThingErrorThingNotFound);
|
||||
}
|
||||
|
||||
// Create a temporary nuki for authentication
|
||||
BluetoothDevice *bluetoothDevice = m_bluetoothAdapter->getDevice(address);
|
||||
|
||||
m_asyncSetupNuki = new Nuki(nullptr, bluetoothDevice, this);
|
||||
connect(m_asyncSetupNuki, &Nuki::authenticationProcessFinished, this, &IntegrationPluginNuki::onNukiAuthenticationProcessFinished);
|
||||
connect(m_asyncSetupNuki, &Nuki::availableChanged, this, &IntegrationPluginNuki::onAsyncSetupNukiAvailableChanged);
|
||||
connect(m_asyncSetupNuki, &Nuki::authenticationProcessFinished, this, [=](const PairingTransactionId &pairingId, bool success){
|
||||
if (m_asyncSetupNuki) {
|
||||
qCDebug(dcNuki()) << "Deleting the temporary pairing device";
|
||||
m_asyncSetupNuki->deleteLater();
|
||||
m_asyncSetupNuki = nullptr;
|
||||
}
|
||||
|
||||
if (!m_pairingInfo) {
|
||||
qCWarning(dcNuki()) << "Authentication process finished, but have not valid pairing translaction id";
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_pairingInfo->transactionId() != pairingId) {
|
||||
qCWarning(dcNuki()) << "Authentication process finished, but have not valid pairing translaction id";
|
||||
return;
|
||||
}
|
||||
|
||||
m_pairingInfo->finish(success ? Thing::ThingErrorNoError : Thing::ThingErrorHardwareFailure);
|
||||
m_pairingInfo = nullptr;
|
||||
});
|
||||
|
||||
connect(m_asyncSetupNuki, &Nuki::availableChanged, this, [=](bool available){
|
||||
// Remove possibly running Nuki setup devices on disconnected
|
||||
if (m_asyncSetupNuki && !available) {
|
||||
qCDebug(dcNuki()) << "Deleting the temporary pairing device";
|
||||
m_asyncSetupNuki->deleteLater();
|
||||
m_asyncSetupNuki = nullptr;
|
||||
|
||||
// Lost connection during authentication
|
||||
if (m_pairingInfo) {
|
||||
qCWarning(dcNuki()) << "Device disconnected during pairing.";
|
||||
m_pairingInfo->finish(Thing::ThingErrorHardwareFailure);
|
||||
m_pairingInfo = nullptr;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
m_asyncSetupNuki->startAuthenticationProcess(info->transactionId());
|
||||
m_pairingInfo = info;
|
||||
m_asyncSetupNuki->startAuthenticationProcess(info->transactionId());
|
||||
connect(info, &ThingPairingInfo::destroyed, this, [this] { m_pairingInfo = nullptr; });
|
||||
}
|
||||
|
||||
|
|
@ -225,7 +258,7 @@ void IntegrationPluginNuki::thingRemoved(Thing *thing)
|
|||
Nuki *nuki = m_nukiDevices.key(thing);
|
||||
nuki->clearSettings();
|
||||
|
||||
// FIXME: deauthenticate nymea from nuki thing
|
||||
// TODO: deauthenticate nymea from nuki
|
||||
|
||||
qCDebug(dcNuki()) << "Delete pairing information from bluez" << nuki->bluetoothDevice();
|
||||
m_bluetoothAdapter->removeDevice(nuki->bluetoothDevice()->address());
|
||||
|
|
@ -298,35 +331,3 @@ void IntegrationPluginNuki::onBluetoothDiscoveryFinished(ThingDiscoveryInfo *inf
|
|||
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
}
|
||||
|
||||
void IntegrationPluginNuki::onAsyncSetupNukiAvailableChanged(bool available)
|
||||
{
|
||||
// Remove possibly running Nuki setup devices on disconnected
|
||||
if (!available && m_asyncSetupNuki) {
|
||||
qCDebug(dcNuki()) << "Deleting the temporary pairing device";
|
||||
m_asyncSetupNuki->deleteLater();
|
||||
m_asyncSetupNuki = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void IntegrationPluginNuki::onNukiAuthenticationProcessFinished(const PairingTransactionId &pairingTransactionId, bool success)
|
||||
{
|
||||
if (m_asyncSetupNuki) {
|
||||
qCDebug(dcNuki()) << "Deleting the temporary pairing device";
|
||||
m_asyncSetupNuki->deleteLater();
|
||||
m_asyncSetupNuki = nullptr;
|
||||
}
|
||||
|
||||
if (!m_pairingInfo) {
|
||||
qCWarning(dcNuki()) << "Authentication process finished, but have not valid pairing translaction id";
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_pairingInfo->transactionId() != pairingTransactionId) {
|
||||
qCWarning(dcNuki()) << "Authentication process finished, but have not valid pairing translaction id";
|
||||
return;
|
||||
}
|
||||
|
||||
m_pairingInfo->finish(success ? Thing::ThingErrorNoError : Thing::ThingErrorHardwareFailure);
|
||||
m_pairingInfo = nullptr;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,10 +76,6 @@ private slots:
|
|||
void onBluetoothEnabledChanged(const bool &enabled);
|
||||
void onBluetoothDiscoveryFinished(ThingDiscoveryInfo *info);
|
||||
|
||||
void onAsyncSetupNukiAvailableChanged(bool available);
|
||||
|
||||
void onNukiAuthenticationProcessFinished(const PairingTransactionId &pairingTransactionId, bool success);
|
||||
|
||||
};
|
||||
|
||||
#endif // INTEGRATIONPLUGINNUKI_H
|
||||
|
|
|
|||
|
|
@ -153,6 +153,7 @@ void Nuki::printServices()
|
|||
|
||||
void Nuki::readDeviceInformationCharacteristics()
|
||||
{
|
||||
qCDebug(dcNuki()) << "Start reading device information";
|
||||
m_initUuidsToRead.append(QBluetoothUuid::SerialNumberString);
|
||||
m_initUuidsToRead.append(QBluetoothUuid::HardwareRevisionString);
|
||||
m_initUuidsToRead.append(QBluetoothUuid::FirmwareRevisionString);
|
||||
|
|
|
|||
|
|
@ -312,7 +312,8 @@ void NukiController::processUserDataNotification(const QByteArray nonce, quint32
|
|||
if (command == NukiUtils::CommandNukiStates) {
|
||||
processNukiStatesData(payload);
|
||||
emit readNukiStatesFinished(true);
|
||||
setState(NukiControllerStateReadingConfigurationRequestChallange);
|
||||
// TODO: read configuration
|
||||
setState(NukiControllerStateIdle);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in New Issue