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