finished dryer and washer
parent
a32d279e56
commit
3b1d8bc565
|
|
@ -449,23 +449,23 @@ QUuid HomeConnect::selectProgram(const QString &haId, const QString &programKey,
|
|||
request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/vnd.bsh.sdk.v1+json");
|
||||
|
||||
QJsonDocument doc;
|
||||
QJsonObject data;
|
||||
QVariantMap data;
|
||||
data.insert("key", programKey);
|
||||
if (!options.isEmpty()) {
|
||||
QJsonArray optionsArray;
|
||||
QVariantList optionsArray;
|
||||
Q_FOREACH(Option option, options) {
|
||||
QJsonObject optionObject;
|
||||
QVariantMap optionObject;
|
||||
optionObject["key"] = option.key;
|
||||
optionObject["value"] = option.value.toString();
|
||||
optionObject["value"] = option.value;
|
||||
if (!option.unit.isEmpty())
|
||||
optionObject["unit"] = option.unit;
|
||||
optionsArray.append(optionObject);
|
||||
}
|
||||
data.insert("options", optionsArray);
|
||||
}
|
||||
QJsonObject obj;
|
||||
QVariantMap obj;
|
||||
obj.insert("data", data);
|
||||
doc.setObject(obj);
|
||||
doc.setObject(QJsonObject::fromVariantMap(obj));
|
||||
QNetworkReply *reply = m_networkManager->put(request, doc.toJson());
|
||||
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
|
||||
connect(reply, &QNetworkReply::finished, this, [this, commandId, reply]{
|
||||
|
|
@ -561,21 +561,21 @@ QUuid HomeConnect::startProgram(const QString &haId, const QString &programKey,
|
|||
request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/vnd.bsh.sdk.v1+json");
|
||||
|
||||
QJsonDocument doc;
|
||||
QJsonObject data;
|
||||
QVariantMap data;
|
||||
data.insert("key", programKey);
|
||||
QJsonArray optionsArray;
|
||||
QVariantList optionsArray;
|
||||
Q_FOREACH(Option option, options) {
|
||||
QJsonObject optionObject;
|
||||
QVariantMap optionObject;
|
||||
optionObject["key"] = option.key;
|
||||
optionObject["value"] = option.value.toString();
|
||||
optionObject["value"] = option.value;
|
||||
if (!option.unit.isEmpty())
|
||||
optionObject["unit"] = option.unit;
|
||||
optionsArray.append(optionObject);
|
||||
}
|
||||
data.insert("options", optionsArray);
|
||||
QJsonObject obj;
|
||||
QVariantMap obj;
|
||||
obj.insert("data", data);
|
||||
doc.setObject(obj);
|
||||
doc.setObject(QJsonObject::fromVariantMap(obj));
|
||||
QNetworkReply *reply = m_networkManager->put(request, doc.toJson());
|
||||
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
|
||||
connect(reply, &QNetworkReply::finished, this, [this, commandId, reply]{
|
||||
|
|
|
|||
|
|
@ -291,7 +291,7 @@ void IntegrationPluginHomeConnect::postSetupThing(Thing *thing)
|
|||
homeConnect->connectEventStream();
|
||||
thing->setStateValue(homeConnectConnectionConnectedStateTypeId, true);
|
||||
thing->setStateValue(homeConnectConnectionLoggedInStateTypeId, true);
|
||||
//TODO set login username
|
||||
//TBD Set user name
|
||||
} else if ((thing->thingClassId() == dryerThingClassId) ||
|
||||
(thing->thingClassId() == fridgeThingClassId) ||
|
||||
(thing->thingClassId() == washerThingClassId) ||
|
||||
|
|
@ -432,12 +432,58 @@ void IntegrationPluginHomeConnect::executeAction(ThingActionInfo *info)
|
|||
startTime.unit = "seconds";
|
||||
startTime.value = action.param(dishwasherStartActionStartTimeParamTypeId).value().toInt() * 60;
|
||||
requestId = homeConnect->startProgram(haid, m_selectedProgram.value(thing), QList<HomeConnect::Option>() << startTime);
|
||||
m_pendingActions.insert(requestId, info);
|
||||
connect(info, &ThingActionInfo::aborted, [requestId, this] {
|
||||
m_pendingActions.remove(requestId);
|
||||
});
|
||||
} else {
|
||||
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
|
||||
}
|
||||
} else if (thing->thingClassId() == washerThingClassId) {
|
||||
if (action.actionTypeId() == washerStartActionTypeId) {
|
||||
if (!m_selectedProgram.contains(thing)) {
|
||||
homeConnect->getProgramsSelected(haid);
|
||||
return info->finish(Thing::ThingErrorMissingParameter, tr("Please select a program first"));
|
||||
}
|
||||
QUuid requestId;
|
||||
requestId = homeConnect->startProgram(haid, m_selectedProgram.value(thing), QList<HomeConnect::Option>());
|
||||
m_pendingActions.insert(requestId, info);
|
||||
connect(info, &ThingActionInfo::aborted, [requestId, this] {
|
||||
m_pendingActions.remove(requestId);
|
||||
});
|
||||
}
|
||||
} else if (thing->thingClassId() == dryerThingClassId) {
|
||||
if (action.actionTypeId() == dryerStartActionTypeId) {
|
||||
if (!m_selectedProgram.contains(thing)) {
|
||||
homeConnect->getProgramsSelected(haid);
|
||||
return info->finish(Thing::ThingErrorMissingParameter, tr("Please select a program first"));
|
||||
}
|
||||
QUuid requestId;
|
||||
requestId = homeConnect->startProgram(haid, m_selectedProgram.value(thing), QList<HomeConnect::Option>());
|
||||
m_pendingActions.insert(requestId, info);
|
||||
connect(info, &ThingActionInfo::aborted, [requestId, this] {
|
||||
m_pendingActions.remove(requestId);
|
||||
});
|
||||
} else if (action.actionTypeId() == dryerDryingTargetActionTypeId) {
|
||||
QUuid requestId;
|
||||
QList<HomeConnect::Option> options;
|
||||
HomeConnect::Option dryingTarget;
|
||||
dryingTarget.key = "LaundryCare.Dryer.Option.DryingTarget";
|
||||
QString target = action.param(dryerDryingTargetActionDryingTargetParamTypeId).value().toString();
|
||||
if (target == "Iron dry") {
|
||||
dryingTarget.value = "LaundryCare.Dryer.EnumType.DryingTarget.IronDry";
|
||||
} else if (target == "Cupboard dry") {
|
||||
dryingTarget.value = "LaundryCare.Dryer.EnumType.DryingTarget.CupboardDry";
|
||||
} else if (target == "Cupboard dry plus") {
|
||||
dryingTarget.value = "LaundryCare.Dryer.EnumType.DryingTarget.CupboardDryPlus";
|
||||
}
|
||||
options.append(dryingTarget);
|
||||
requestId = homeConnect->setSelectedProgramOptions(haid, options);
|
||||
m_pendingActions.insert(requestId, info);
|
||||
connect(info, &ThingActionInfo::aborted, [requestId, this] {
|
||||
m_pendingActions.remove(requestId);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
Q_ASSERT_X(false, "executeAction", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
|
||||
}
|
||||
|
|
@ -448,6 +494,8 @@ void IntegrationPluginHomeConnect::thingRemoved(Thing *thing)
|
|||
qCDebug(dcHomeConnect) << "Delete " << thing->name();
|
||||
if (thing->thingClassId() == homeConnectConnectionThingClassId) {
|
||||
m_homeConnectConnections.take(thing)->deleteLater();
|
||||
} else {
|
||||
m_selectedProgram.remove(thing);
|
||||
}
|
||||
|
||||
if (myThings().empty()) {
|
||||
|
|
@ -546,13 +594,18 @@ void IntegrationPluginHomeConnect::parseKey(Thing *thing, const QString &key, co
|
|||
thing->setStateValue(ovenDurationStateTypeId, value);
|
||||
} else if (key == "Cooking.Oven.Option.FastPreHeat") {
|
||||
} else if (key == "BSH.Common.Option.StartInRelative") {
|
||||
//TODO
|
||||
} else if (key == "LaundryCare.Washer.Option.Temperature") {
|
||||
thing->setStateValue(washerTemperatureStateTypeId, value);
|
||||
thing->setStateValue(washerTemperatureStateTypeId, value.toString().split('.').last()); // Cold, 20, 40, 60°C
|
||||
} else if (key == "LaundryCare.Washer.Option.SpinSpeed") {
|
||||
thing->setStateValue(washerSpinSpeedStateTypeId, value);
|
||||
thing->setStateValue(washerSpinSpeedStateTypeId, value.toString().split('.').last()); // Off, 400, 600, 800
|
||||
} else if (key == "LaundryCare.Dryer.Option.DryingTarget") {
|
||||
//TODO
|
||||
if (value.toString() == "LaundryCare.Dryer.EnumType.DryingTarget.IronDry") {
|
||||
thing->setStateValue(dryerDryingTargetStateTypeId, "Iron dry");
|
||||
} else if (value.toString() == "LaundryCare.Dryer.EnumType.DryingTarget.CupboardDry") {
|
||||
thing->setStateValue(dryerDryingTargetStateTypeId, "Cupboard dry");
|
||||
} else if (value.toString() == "LaundryCare.Dryer.EnumType.DryingTarget.CupboardDryPlus") {
|
||||
thing->setStateValue(dryerDryingTargetStateTypeId, "Cupboard dry plus");
|
||||
}
|
||||
} else if (key == "ConsumerProducts.CoffeeMaker.Option.BeanAmount") {
|
||||
QString beanAmount = value.toString();
|
||||
if (m_coffeeStrengthTypes.contains(beanAmount)) {
|
||||
|
|
@ -596,7 +649,26 @@ void IntegrationPluginHomeConnect::parseKey(Thing *thing, const QString &key, co
|
|||
} else if (key == "ConsumerProducts.CleaningRobot.Option.ProcessPhase") {
|
||||
} else if (key == "BSH.Common.Status.OperationState") {
|
||||
if (m_operationStateTypeIds.contains(thing->thingClassId())) {
|
||||
thing->setStateValue(m_operationStateTypeIds.value(thing->thingClassId()), value.toString().split('.').last());
|
||||
QString operationState = value.toString();
|
||||
if (operationState == "BSH.Common.EnumType.OperationState.Inactive") {
|
||||
thing->setStateValue(m_operationStateTypeIds.value(thing->thingClassId()), "Inactive");
|
||||
} else if (operationState == "BSH.Common.EnumType.OperationState.Ready") {
|
||||
thing->setStateValue(m_operationStateTypeIds.value(thing->thingClassId()), "Ready");
|
||||
} else if (operationState == "BSH.Common.EnumType.OperationState.DelayedStart") {
|
||||
thing->setStateValue(m_operationStateTypeIds.value(thing->thingClassId()), "Delayed start");
|
||||
} else if (operationState == "BSH.Common.EnumType.OperationState.Run") {
|
||||
thing->setStateValue(m_operationStateTypeIds.value(thing->thingClassId()), "Run");
|
||||
} else if (operationState == "BSH.Common.EnumType.OperationState.Pause") {
|
||||
thing->setStateValue(m_operationStateTypeIds.value(thing->thingClassId()), "Pause");
|
||||
} else if (operationState == "BSH.Common.EnumType.OperationState.ActionRequired") {
|
||||
thing->setStateValue(m_operationStateTypeIds.value(thing->thingClassId()), "Action required");
|
||||
} else if (operationState == "BSH.Common.EnumType.OperationState.Finished") {
|
||||
thing->setStateValue(m_operationStateTypeIds.value(thing->thingClassId()), "Finished");
|
||||
} else if (operationState == "BSH.Common.EnumType.OperationState.Error") {
|
||||
thing->setStateValue(m_operationStateTypeIds.value(thing->thingClassId()), "Error");
|
||||
} else if (operationState == "BSH.Common.EnumType.OperationState.Aborting") {
|
||||
thing->setStateValue(m_operationStateTypeIds.value(thing->thingClassId()), "Aborting");
|
||||
}
|
||||
}
|
||||
if (value.toString().split('.').last().contains("Finished")) {
|
||||
//apparently the finished event is not emitted by HomeConnect so this will hopefully do the trick
|
||||
|
|
@ -797,7 +869,7 @@ void IntegrationPluginHomeConnect::onReceivedHomeAppliances(const QList<HomeConn
|
|||
thingClassId = cookProcessorThingClassId;
|
||||
} else if (appliance.type.contains("WasherDryer", Qt::CaseInsensitive)) {
|
||||
thingClassId = washerThingClassId;
|
||||
//FIXME add washerdryer thing classid
|
||||
//To improve add washerdryer thing classid
|
||||
} else {
|
||||
qCWarning(dcHomeConnect()) << "Unknown thing type" << appliance.type;
|
||||
continue;
|
||||
|
|
@ -829,6 +901,7 @@ void IntegrationPluginHomeConnect::onReceivedStatusList(const QString &haId, con
|
|||
|
||||
Q_FOREACH(Thing *thing, myThings().filterByParentId(parentThing->id())) {
|
||||
if (thing->paramValue(m_idParamTypeIds.value(thing->thingClassId())).toString() == haId) {
|
||||
qCDebug(dcHomeConnect()) << "Received status list device" << thing->name();
|
||||
Q_FOREACH(QString key, statusList.keys()) {
|
||||
parseKey(thing, key, statusList.value(key));
|
||||
}
|
||||
|
|
@ -887,29 +960,13 @@ void IntegrationPluginHomeConnect::onReceivedSelectedProgram(const QString &haId
|
|||
|
||||
Q_FOREACH(Thing *thing, myThings().filterByParentId(parentThing->id())) {
|
||||
if (thing->paramValue(m_idParamTypeIds.value(thing->thingClassId())).toString() == haId) {
|
||||
if (thing->thingClassId() == ovenThingClassId) {
|
||||
if (key.contains("Cooking.Oven.Program.HeatingMode")) {
|
||||
thing->setStateValue(ovenSelectedProgramStateTypeId, key.split('.').last());
|
||||
}
|
||||
} else if (thing->thingClassId() == washerThingClassId) {
|
||||
if (key.contains("LaundryCare.Washer.Program")) {
|
||||
thing->setStateValue(washerSelectedProgramStateTypeId, key.split('.').last());
|
||||
}
|
||||
} else if (thing->thingClassId() == dishwasherThingClassId) {
|
||||
if (key.contains("Dishcare.Dishwasher.Program")) {
|
||||
thing->setStateValue(dishwasherSelectedProgramStateTypeId, key.split('.').last());
|
||||
}
|
||||
} else if (thing->thingClassId() == dryerThingClassId) {
|
||||
if (key.contains("LaundryCare.Dryer.Program")) {
|
||||
thing->setStateValue(dryerSelectedProgramStateTypeId, key.split('.').last());
|
||||
}
|
||||
} else if (thing->thingClassId() == coffeeMakerThingClassId) {
|
||||
if (key.contains("ConsumerProducts.CoffeeMaker.Program")) {
|
||||
thing->setStateValue(coffeeMakerSelectedProgramStateTypeId, key.split('.').last());
|
||||
}
|
||||
qCDebug(dcHomeConnect()) << "Received selected program" << key << "device" << thing->name();
|
||||
if (m_selectedProgramStateTypeIds.contains(thing->thingClassId())) {
|
||||
thing->setStateValue(m_selectedProgramStateTypeIds.value(thing->thingClassId()), key.split('.').last());
|
||||
}
|
||||
m_selectedProgram.insert(thing, key);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -926,7 +983,7 @@ void IntegrationPluginHomeConnect::onReceivedSettings(const QString &haId, const
|
|||
Q_FOREACH(QString setting, settings.keys()) {
|
||||
parseSettingKey(thing, setting, settings.value(setting));
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -635,6 +635,21 @@
|
|||
"defaultValue": "None",
|
||||
"type": "QString"
|
||||
},
|
||||
{
|
||||
"id": "829c1ec6-5b5a-490a-b487-52287eab91ba",
|
||||
"name": "dryingTarget",
|
||||
"displayName": "Drying target",
|
||||
"displayNameEvent": "Drying target changed",
|
||||
"displayNameAction": "Set drying target",
|
||||
"defaultValue": "Iron dry",
|
||||
"type": "QString",
|
||||
"possibleValues": [
|
||||
"Iron dry",
|
||||
"Cupboard dry",
|
||||
"Cupboard dry plus"
|
||||
],
|
||||
"writable": true
|
||||
},
|
||||
{
|
||||
"id": "6586f2d9-daec-43fa-8f7f-f3afc9d70046",
|
||||
"name": "endTime",
|
||||
|
|
|
|||
Loading…
Reference in New Issue