fixed setup order
This commit is contained in:
parent
214b1052a2
commit
d2870f4a71
@ -294,3 +294,94 @@ void HomeConnect::getHomeAppliances()
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void HomeConnect::getProgramsAvailable(const QString &haId)
|
||||
{
|
||||
QUrl url = QUrl(m_baseControlUrl+"/api/homeappliances/"+haId+"/programs/available");
|
||||
|
||||
QNetworkRequest request(url);
|
||||
request.setRawHeader("Authorization", "Bearer "+m_accessToken);
|
||||
request.setRawHeader("Accept-Language", "en-US");
|
||||
request.setRawHeader("accept", "application/vnd.bsh.sdk.v1+json");
|
||||
|
||||
QNetworkReply *reply = m_networkManager->get(request);
|
||||
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
|
||||
connect(reply, &QNetworkReply::finished, this, [this, reply]{
|
||||
|
||||
QJsonParseError error;
|
||||
QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error);
|
||||
if (error.error != QJsonParseError::NoError) {
|
||||
qCWarning(dcHomeConnect()) << "Get programs available: Recieved invalide JSON object";
|
||||
return;
|
||||
}
|
||||
qCDebug(dcHomeConnect()) << "Get programs available" << data.toJson();
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
void HomeConnect::getProgramsActiveOption(const QString &haId, const QString &optionKey)
|
||||
{
|
||||
QUrl url = QUrl(m_baseControlUrl+"/api/homeappliances/"+haId+"/programs/active/options/"+optionKey);
|
||||
|
||||
QNetworkRequest request(url);
|
||||
request.setRawHeader("Authorization", "Bearer "+m_accessToken);
|
||||
request.setRawHeader("Accept-Language", "en-US");
|
||||
request.setRawHeader("accept", "application/vnd.bsh.sdk.v1+json");
|
||||
|
||||
QNetworkReply *reply = m_networkManager->get(request);
|
||||
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
|
||||
connect(reply, &QNetworkReply::finished, this, [this, reply]{
|
||||
|
||||
QJsonParseError error;
|
||||
QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error);
|
||||
if (error.error != QJsonParseError::NoError) {
|
||||
qCDebug(dcHomeConnect()) << "Get home appliances: Recieved invalide JSON object";
|
||||
return;
|
||||
}
|
||||
qCDebug(dcHomeConnect()) << "Get home appliances" << data.toJson();
|
||||
if (data.toVariant().toMap().contains("data")) {
|
||||
QVariantMap dataMap = data.toVariant().toMap().value("data").toMap();
|
||||
qCDebug(dcHomeConnect()) << "key" << dataMap.value("key").toString() << "value" << dataMap.value("value").toString() << dataMap.value("unit").toString();
|
||||
} else if (data.toVariant().toMap().contains("error")) {
|
||||
qCWarning(dcHomeConnect()) << "Get home appliences" << data.toVariant().toMap().value("error").toMap().value("description").toString();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* Get a list of available setting of the home appliance.
|
||||
* Possible Settings:
|
||||
* Power state
|
||||
* Fridge temperature
|
||||
* Fridge super mode
|
||||
* Freezer temperature
|
||||
* Freezer super mode
|
||||
*/
|
||||
|
||||
void HomeConnect::getSettings(const QString &haid)
|
||||
{
|
||||
QUrl url = QUrl(m_baseControlUrl+"/api/homeappliances/"+haid+"/settings");
|
||||
|
||||
QNetworkRequest request(url);
|
||||
request.setRawHeader("Authorization", "Bearer "+m_accessToken);
|
||||
request.setRawHeader("Accept-Language", "en-US");
|
||||
request.setRawHeader("accept", "application/vnd.bsh.sdk.v1+json");
|
||||
|
||||
QNetworkReply *reply = m_networkManager->get(request);
|
||||
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
|
||||
connect(reply, &QNetworkReply::finished, this, [this, reply]{
|
||||
|
||||
QJsonParseError error;
|
||||
QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error);
|
||||
if (error.error != QJsonParseError::NoError) {
|
||||
qCDebug(dcHomeConnect()) << "Get settings: Recieved invalide JSON object";
|
||||
return;
|
||||
}
|
||||
qCDebug(dcHomeConnect()) << "Get settings" << data.toJson();
|
||||
if (data.toVariant().toMap().contains("data")) {
|
||||
QVariantMap dataMap = data.toVariant().toMap().value("data").toMap();
|
||||
qCDebug(dcHomeConnect()) << "key" << dataMap.value("key").toString() << "value" << dataMap.value("value").toString() << dataMap.value("unit").toString();
|
||||
} else if (data.toVariant().toMap().contains("error")) {
|
||||
qCWarning(dcHomeConnect()) << "Get settings" << data.toVariant().toMap().value("error").toMap().value("description").toString();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -65,6 +65,13 @@ public:
|
||||
QString type;
|
||||
QString homeApplianceId;
|
||||
};
|
||||
|
||||
struct OptionData {
|
||||
QString key;
|
||||
QVariant value;
|
||||
QString unit;
|
||||
};
|
||||
|
||||
HomeConnect(NetworkAccessManager *networkmanager, const QByteArray &clientKey, const QByteArray &clientSecret, bool simulationMode = false, QObject *parent = nullptr);
|
||||
QByteArray accessToken();
|
||||
QByteArray refreshToken();
|
||||
@ -78,6 +85,11 @@ public:
|
||||
void getHomeAppliances();
|
||||
void getHomeAppliance(const QString &haid);
|
||||
|
||||
void getProgramsAvailable(const QString &haId);
|
||||
void getProgramsActiveOption(const QString &haId, const QString &optionKey);
|
||||
|
||||
void getSettings(const QString &haid);
|
||||
|
||||
private:
|
||||
bool m_simulationMode = false;
|
||||
QByteArray m_baseAuthorizationUrl;
|
||||
|
||||
@ -136,7 +136,6 @@ void IntegrationPluginHomeConnect::setupThing(ThingSetupInfo *info)
|
||||
connect(homeConnect, &HomeConnect::authenticationStatusChanged, this, &IntegrationPluginHomeConnect::onAuthenticationStatusChanged);
|
||||
connect(homeConnect, &HomeConnect::receivedHomeAppliances, this, &IntegrationPluginHomeConnect::onReceivedHomeAppliances);
|
||||
m_homeConnectConnections.insert(thing, homeConnect);
|
||||
m_homeConnectConnections.insert(thing, homeConnect);
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
} else {
|
||||
//device loaded from the device database, needs a new access token;
|
||||
@ -152,18 +151,22 @@ void IntegrationPluginHomeConnect::setupThing(ThingSetupInfo *info)
|
||||
homeConnect->getAccessTokenFromRefreshToken(refreshToken);
|
||||
m_asyncSetup.insert(homeConnect, info);
|
||||
}
|
||||
} else if (thing->thingClassId() == dryerThingClassId) {
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
} else if (thing->thingClassId() == fridgeThingClassId) {
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
} else if (thing->thingClassId() == washerThingClassId) {
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
} else if (thing->thingClassId() == dishwasherThingClassId) {
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
} else if (thing->thingClassId() == coffeMakerThingClassId) {
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
} else if (thing->thingClassId() == ovenThingClassId) {
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
} else if ((thing->thingClassId() == dryerThingClassId) ||
|
||||
(thing->thingClassId() == fridgeThingClassId) ||
|
||||
(thing->thingClassId() == washerThingClassId) ||
|
||||
(thing->thingClassId() == dishwasherThingClassId) ||
|
||||
(thing->thingClassId() == coffeMakerThingClassId) ||
|
||||
(thing->thingClassId() == ovenThingClassId)) {
|
||||
Thing *parentThing = myThings().findById(thing->parentId());
|
||||
if (parentThing->setupComplete()) {
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
} else {
|
||||
connect(parentThing, &Thing::setupStatusChanged, info, [parentThing, info]{
|
||||
if (parentThing->setupComplete()) {
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
Q_ASSERT_X(false, "setupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
|
||||
}
|
||||
@ -212,9 +215,15 @@ void IntegrationPluginHomeConnect::postSetupThing(Thing *thing)
|
||||
(thing->thingClassId() == coffeMakerThingClassId) ||
|
||||
(thing->thingClassId() == ovenThingClassId)) {
|
||||
Thing *parentThing = myThings().findById(thing->parentId());
|
||||
if (!parentThing)
|
||||
qCWarning(dcHomeConnect()) << "Could not find parent with Id" << thing->parentId().toString();
|
||||
HomeConnect *homeConnect = m_homeConnectConnections.value(parentThing);
|
||||
if (homeConnect)
|
||||
homeConnect->getHomeAppliances();
|
||||
QString haId = thing->paramValue(m_idParamTypeIds.value(thing->thingClassId())).toString();
|
||||
if (!homeConnect) {
|
||||
qCWarning(dcHomeConnect()) << "Could not find HomeConnect connection for thing" << thing->name();
|
||||
} else {
|
||||
homeConnect->getProgramsAvailable(haId);
|
||||
}
|
||||
} else {
|
||||
Q_ASSERT_X(false, "postSetupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user