able to set mode and temperature

This commit is contained in:
Boernsman 2019-12-18 23:41:29 +01:00
parent 0a8e8ef280
commit dd14d4fcfc
4 changed files with 27 additions and 17 deletions

View File

@ -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);

View File

@ -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

View File

@ -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();

View File

@ -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: