diff --git a/tado/deviceplugintado.cpp b/tado/deviceplugintado.cpp index 8e6528c5..73bffd6b 100644 --- a/tado/deviceplugintado.cpp +++ b/tado/deviceplugintado.cpp @@ -153,16 +153,22 @@ void DevicePluginTado::executeAction(DeviceActionInfo *info) QString zoneId = device->paramValue(zoneDeviceZoneIdParamTypeId).toString(); if (action.actionTypeId() == zoneModeActionTypeId) { - if (action.param(zoneModeActionModeParamTypeId).value().toString() == "Home") { + if (action.param(zoneModeActionModeParamTypeId).value().toString() == "Tado") { tado->deleteOverlay(homeId, zoneId); + } else if (action.param(zoneModeActionModeParamTypeId).value().toString() == "Off") { + tado->setOverlay(homeId, zoneId, false, device->stateValue(zoneTargetTemperatureStateTypeId).toDouble()); } else { - + tado->setOverlay(homeId, zoneId, true, device->stateValue(zoneTargetTemperatureStateTypeId).toDouble()); } info->finish(Device::DeviceErrorNoError); } else if (action.actionTypeId() == zoneTargetTemperatureActionTypeId) { 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); } } @@ -290,7 +296,7 @@ void DevicePluginTado::onZoneStateReceived(const QString &homeId, const QString device->setStateValue(zoneModeStateTypeId, "Off"); } } else { - device->setStateValue(zoneModeStateTypeId, "Home"); + device->setStateValue(zoneModeStateTypeId, "Tado"); } device->setStateValue(zonePowerStateTypeId, state.power); diff --git a/tado/deviceplugintado.json b/tado/deviceplugintado.json index 865987bf..6b55e19b 100644 --- a/tado/deviceplugintado.json +++ b/tado/deviceplugintado.json @@ -89,10 +89,10 @@ "displayNameEvent": "Mode changed", "displayNameAction": "Set mode", "type": "QString", - "defaultValue": "Home", + "defaultValue": "Tado", "possibleValues": [ "Manual", - "Home", + "Tado", "Off" ], "writable": true diff --git a/tado/tado.cpp b/tado/tado.cpp index 554fc08d..4390a5f0 100644 --- a/tado/tado.cpp +++ b/tado/tado.cpp @@ -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; request.setUrl(QUrl(m_baseControlUrl+"/homes/"+homeId+"/zones/"+zoneId+"/overlay")); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json;charset=utf-8"); request.setRawHeader("Authorization", "Bearer " + m_accessToken.toLocal8Bit()); - QJsonDocument doc; + /*QJsonDocument doc; QJsonObject obj; QJsonObject setting; - setting.insert("type", "HEATING"); setting.insert("power", "ON"); QJsonObject temperature; 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); obj.insert("setting", setting); QJsonObject termination; termination.insert("type", "MANUAL"); obj.insert("termination", termination); - doc.setObject(obj); + doc.setObject(obj);*/ - QNetworkReply *reply = m_networkManager->put(request, doc.toJson()); - qCDebug(dcTado()) << "Sending request" << request.url() << doc.toJson(); + QByteArray body; + 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] { reply->deleteLater(); diff --git a/tado/tado.h b/tado/tado.h index 1c8b4467..50f21c67 100644 --- a/tado/tado.h +++ b/tado/tado.h @@ -81,7 +81,7 @@ public: void getZones(const QString &homeId); 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); private: