able to set mode and temperature
This commit is contained in:
parent
0a8e8ef280
commit
dd14d4fcfc
@ -153,16 +153,22 @@ void DevicePluginTado::executeAction(DeviceActionInfo *info)
|
|||||||
QString zoneId = device->paramValue(zoneDeviceZoneIdParamTypeId).toString();
|
QString zoneId = device->paramValue(zoneDeviceZoneIdParamTypeId).toString();
|
||||||
if (action.actionTypeId() == zoneModeActionTypeId) {
|
if (action.actionTypeId() == zoneModeActionTypeId) {
|
||||||
|
|
||||||
if (action.param(zoneModeActionModeParamTypeId).value().toString() == "Home") {
|
if (action.param(zoneModeActionModeParamTypeId).value().toString() == "Tado") {
|
||||||
tado->deleteOverlay(homeId, zoneId);
|
tado->deleteOverlay(homeId, zoneId);
|
||||||
|
} else if (action.param(zoneModeActionModeParamTypeId).value().toString() == "Off") {
|
||||||
|
tado->setOverlay(homeId, zoneId, false, device->stateValue(zoneTargetTemperatureStateTypeId).toDouble());
|
||||||
} else {
|
} else {
|
||||||
|
tado->setOverlay(homeId, zoneId, true, device->stateValue(zoneTargetTemperatureStateTypeId).toDouble());
|
||||||
}
|
}
|
||||||
info->finish(Device::DeviceErrorNoError);
|
info->finish(Device::DeviceErrorNoError);
|
||||||
} else if (action.actionTypeId() == zoneTargetTemperatureActionTypeId) {
|
} else if (action.actionTypeId() == zoneTargetTemperatureActionTypeId) {
|
||||||
|
|
||||||
double temperature = action.param(zoneTargetTemperatureActionTargetTemperatureParamTypeId).value().toDouble();
|
double temperature = action.param(zoneTargetTemperatureActionTargetTemperatureParamTypeId).value().toDouble();
|
||||||
tado->setOverlay(homeId, zoneId, "MANUAL", temperature);
|
if (temperature <= 0) {
|
||||||
|
tado->setOverlay(homeId, zoneId, false, 0);
|
||||||
|
} else {
|
||||||
|
tado->setOverlay(homeId, zoneId, true, temperature);
|
||||||
|
}
|
||||||
info->finish(Device::DeviceErrorNoError);
|
info->finish(Device::DeviceErrorNoError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -290,7 +296,7 @@ void DevicePluginTado::onZoneStateReceived(const QString &homeId, const QString
|
|||||||
device->setStateValue(zoneModeStateTypeId, "Off");
|
device->setStateValue(zoneModeStateTypeId, "Off");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
device->setStateValue(zoneModeStateTypeId, "Home");
|
device->setStateValue(zoneModeStateTypeId, "Tado");
|
||||||
}
|
}
|
||||||
|
|
||||||
device->setStateValue(zonePowerStateTypeId, state.power);
|
device->setStateValue(zonePowerStateTypeId, state.power);
|
||||||
|
|||||||
@ -89,10 +89,10 @@
|
|||||||
"displayNameEvent": "Mode changed",
|
"displayNameEvent": "Mode changed",
|
||||||
"displayNameAction": "Set mode",
|
"displayNameAction": "Set mode",
|
||||||
"type": "QString",
|
"type": "QString",
|
||||||
"defaultValue": "Home",
|
"defaultValue": "Tado",
|
||||||
"possibleValues": [
|
"possibleValues": [
|
||||||
"Manual",
|
"Manual",
|
||||||
"Home",
|
"Tado",
|
||||||
"Off"
|
"Off"
|
||||||
],
|
],
|
||||||
"writable": true
|
"writable": true
|
||||||
|
|||||||
@ -253,32 +253,36 @@ void Tado::getZoneState(const QString &homeId, const QString &zoneId)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tado::setOverlay(const QString &homeId, const QString &zoneId, const QString &mode, double targetTemperature)
|
void Tado::setOverlay(const QString &homeId, const QString &zoneId, bool power, double targetTemperature)
|
||||||
{
|
{
|
||||||
Q_UNUSED(mode);
|
|
||||||
Q_UNUSED(targetTemperature);
|
|
||||||
|
|
||||||
QNetworkRequest request;
|
QNetworkRequest request;
|
||||||
request.setUrl(QUrl(m_baseControlUrl+"/homes/"+homeId+"/zones/"+zoneId+"/overlay"));
|
request.setUrl(QUrl(m_baseControlUrl+"/homes/"+homeId+"/zones/"+zoneId+"/overlay"));
|
||||||
request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json;charset=utf-8");
|
request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json;charset=utf-8");
|
||||||
request.setRawHeader("Authorization", "Bearer " + m_accessToken.toLocal8Bit());
|
request.setRawHeader("Authorization", "Bearer " + m_accessToken.toLocal8Bit());
|
||||||
QJsonDocument doc;
|
/*QJsonDocument doc;
|
||||||
QJsonObject obj;
|
QJsonObject obj;
|
||||||
QJsonObject setting;
|
QJsonObject setting;
|
||||||
setting.insert("type", "HEATING");
|
|
||||||
setting.insert("power", "ON");
|
setting.insert("power", "ON");
|
||||||
QJsonObject temperature;
|
QJsonObject temperature;
|
||||||
temperature.insert("celsius", targetTemperature);
|
temperature.insert("celsius", targetTemperature);
|
||||||
temperature.insert("fahrenheit", (targetTemperature * (9.0/5.0)) + 32.0);
|
//temperature.insert("fahrenheit", (targetTemperature * (9.0/5.0)) + 32.0);
|
||||||
|
setting.insert("type", "HEATING");
|
||||||
setting.insert("temperature", temperature);
|
setting.insert("temperature", temperature);
|
||||||
obj.insert("setting", setting);
|
obj.insert("setting", setting);
|
||||||
QJsonObject termination;
|
QJsonObject termination;
|
||||||
termination.insert("type", "MANUAL");
|
termination.insert("type", "MANUAL");
|
||||||
obj.insert("termination", termination);
|
obj.insert("termination", termination);
|
||||||
doc.setObject(obj);
|
doc.setObject(obj);*/
|
||||||
|
|
||||||
QNetworkReply *reply = m_networkManager->put(request, doc.toJson());
|
QByteArray body;
|
||||||
qCDebug(dcTado()) << "Sending request" << request.url() << doc.toJson();
|
QByteArray powerString;
|
||||||
|
if (power)
|
||||||
|
powerString = "ON";
|
||||||
|
else
|
||||||
|
powerString = "OFF";
|
||||||
|
|
||||||
|
body.append("{\"setting\":{\"type\":\"HEATING\",\"power\":\""+ powerString + "\",\"temperature\":{\"celsius\":" + QVariant(targetTemperature).toByteArray() + "}},\"termination\":{\"type\":\"MANUAL\"}}");
|
||||||
|
QNetworkReply *reply = m_networkManager->put(request, body);
|
||||||
connect(reply, &QNetworkReply::finished, this, [reply, this] {
|
connect(reply, &QNetworkReply::finished, this, [reply, this] {
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
|
||||||
|
|||||||
@ -81,7 +81,7 @@ public:
|
|||||||
void getZones(const QString &homeId);
|
void getZones(const QString &homeId);
|
||||||
void getZoneState(const QString &homeId, const QString &zoneId);
|
void getZoneState(const QString &homeId, const QString &zoneId);
|
||||||
|
|
||||||
void setOverlay(const QString &homeId, const QString &zoneId, const QString &mode, double targetTemperature);
|
void setOverlay(const QString &homeId, const QString &zoneId, bool power, double targetTemperature);
|
||||||
void deleteOverlay(const QString &homeId, const QString &zoneId);
|
void deleteOverlay(const QString &homeId, const QString &zoneId);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user