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 type;
|
||||||
QString homeApplianceId;
|
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);
|
HomeConnect(NetworkAccessManager *networkmanager, const QByteArray &clientKey, const QByteArray &clientSecret, bool simulationMode = false, QObject *parent = nullptr);
|
||||||
QByteArray accessToken();
|
QByteArray accessToken();
|
||||||
QByteArray refreshToken();
|
QByteArray refreshToken();
|
||||||
@ -78,6 +85,11 @@ public:
|
|||||||
void getHomeAppliances();
|
void getHomeAppliances();
|
||||||
void getHomeAppliance(const QString &haid);
|
void getHomeAppliance(const QString &haid);
|
||||||
|
|
||||||
|
void getProgramsAvailable(const QString &haId);
|
||||||
|
void getProgramsActiveOption(const QString &haId, const QString &optionKey);
|
||||||
|
|
||||||
|
void getSettings(const QString &haid);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_simulationMode = false;
|
bool m_simulationMode = false;
|
||||||
QByteArray m_baseAuthorizationUrl;
|
QByteArray m_baseAuthorizationUrl;
|
||||||
|
|||||||
@ -136,7 +136,6 @@ void IntegrationPluginHomeConnect::setupThing(ThingSetupInfo *info)
|
|||||||
connect(homeConnect, &HomeConnect::authenticationStatusChanged, this, &IntegrationPluginHomeConnect::onAuthenticationStatusChanged);
|
connect(homeConnect, &HomeConnect::authenticationStatusChanged, this, &IntegrationPluginHomeConnect::onAuthenticationStatusChanged);
|
||||||
connect(homeConnect, &HomeConnect::receivedHomeAppliances, this, &IntegrationPluginHomeConnect::onReceivedHomeAppliances);
|
connect(homeConnect, &HomeConnect::receivedHomeAppliances, this, &IntegrationPluginHomeConnect::onReceivedHomeAppliances);
|
||||||
m_homeConnectConnections.insert(thing, homeConnect);
|
m_homeConnectConnections.insert(thing, homeConnect);
|
||||||
m_homeConnectConnections.insert(thing, homeConnect);
|
|
||||||
info->finish(Thing::ThingErrorNoError);
|
info->finish(Thing::ThingErrorNoError);
|
||||||
} else {
|
} else {
|
||||||
//device loaded from the device database, needs a new access token;
|
//device loaded from the device database, needs a new access token;
|
||||||
@ -152,18 +151,22 @@ void IntegrationPluginHomeConnect::setupThing(ThingSetupInfo *info)
|
|||||||
homeConnect->getAccessTokenFromRefreshToken(refreshToken);
|
homeConnect->getAccessTokenFromRefreshToken(refreshToken);
|
||||||
m_asyncSetup.insert(homeConnect, info);
|
m_asyncSetup.insert(homeConnect, info);
|
||||||
}
|
}
|
||||||
} else if (thing->thingClassId() == dryerThingClassId) {
|
} 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);
|
info->finish(Thing::ThingErrorNoError);
|
||||||
} else if (thing->thingClassId() == fridgeThingClassId) {
|
} else {
|
||||||
info->finish(Thing::ThingErrorNoError);
|
connect(parentThing, &Thing::setupStatusChanged, info, [parentThing, info]{
|
||||||
} else if (thing->thingClassId() == washerThingClassId) {
|
if (parentThing->setupComplete()) {
|
||||||
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);
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Q_ASSERT_X(false, "setupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
|
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() == coffeMakerThingClassId) ||
|
||||||
(thing->thingClassId() == ovenThingClassId)) {
|
(thing->thingClassId() == ovenThingClassId)) {
|
||||||
Thing *parentThing = myThings().findById(thing->parentId());
|
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);
|
HomeConnect *homeConnect = m_homeConnectConnections.value(parentThing);
|
||||||
if (homeConnect)
|
QString haId = thing->paramValue(m_idParamTypeIds.value(thing->thingClassId())).toString();
|
||||||
homeConnect->getHomeAppliances();
|
if (!homeConnect) {
|
||||||
|
qCWarning(dcHomeConnect()) << "Could not find HomeConnect connection for thing" << thing->name();
|
||||||
|
} else {
|
||||||
|
homeConnect->getProgramsAvailable(haId);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Q_ASSERT_X(false, "postSetupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
|
Q_ASSERT_X(false, "postSetupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user