From 07421e9b1f7dde3b961918512f28a20b6a4544f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 25 Feb 2016 12:49:10 +0100 Subject: [PATCH] add hue upgrade action --- .../philipshue/devicepluginphilipshue.cpp | 10 +++++++--- .../philipshue/devicepluginphilipshue.json | 5 +++++ plugins/deviceplugins/philipshue/huebridge.cpp | 18 +++++++++++++++++- plugins/deviceplugins/philipshue/huebridge.h | 1 + 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/plugins/deviceplugins/philipshue/devicepluginphilipshue.cpp b/plugins/deviceplugins/philipshue/devicepluginphilipshue.cpp index e532a428..b4713de5 100644 --- a/plugins/deviceplugins/philipshue/devicepluginphilipshue.cpp +++ b/plugins/deviceplugins/philipshue/devicepluginphilipshue.cpp @@ -539,6 +539,10 @@ DeviceManager::DeviceError DevicePluginPhilipsHue::executeAction(Device *device, QPair request = bridge->createCheckUpdatesRequest(); m_asyncActions.insert(networkManagerPut(request.first, request.second),QPair(device, action.id())); return DeviceManager::DeviceErrorAsync; + } else if (action.actionTypeId() == upgradeActionTypeId) { + QPair request = bridge->createUpgradeRequest(); + m_asyncActions.insert(networkManagerPut(request.first, request.second),QPair(device, action.id())); + return DeviceManager::DeviceErrorAsync; } return DeviceManager::DeviceErrorActionTypeNotFound; } @@ -1166,18 +1170,18 @@ void DevicePluginPhilipsHue::processActionResponse(Device *device, const ActionI // check JSON error if (error.error != QJsonParseError::NoError) { qCWarning(dcPhilipsHue) << "Hue Bridge json error in response" << error.errorString(); - emit actionExecutionFinished(actionId, DeviceManager::DeviceErrorHardwareNotAvailable); + emit actionExecutionFinished(actionId, DeviceManager::DeviceErrorHardwareFailure); return; } // check response error if (data.contains("error")) { if (!jsonDoc.toVariant().toList().isEmpty()) { - qCWarning(dcPhilipsHue) << "Failed to execute Hue action:" << jsonDoc.toVariant().toList().first().toMap().value("error").toMap().value("description").toString(); + qCWarning(dcPhilipsHue) << "Failed to execute Hue action:" << jsonDoc.toJson(); //jsonDoc.toVariant().toList().first().toMap().value("error").toMap().value("description").toString(); } else { qCWarning(dcPhilipsHue) << "Failed to execute Hue action: Invalid error message format"; } - emit actionExecutionFinished(actionId, DeviceManager::DeviceErrorHardwareNotAvailable); + emit actionExecutionFinished(actionId, DeviceManager::DeviceErrorHardwareFailure); return; } diff --git a/plugins/deviceplugins/philipshue/devicepluginphilipshue.json b/plugins/deviceplugins/philipshue/devicepluginphilipshue.json index 3f83229e..e5db327a 100644 --- a/plugins/deviceplugins/philipshue/devicepluginphilipshue.json +++ b/plugins/deviceplugins/philipshue/devicepluginphilipshue.json @@ -106,6 +106,11 @@ "id": "07a85e91-d064-4bce-b017-13fd0c320c0b", "idName": "checkForUpdates", "name": "check updates" + }, + { + "id": "6dfbc7c0-7372-42f6-82ba-e777cb32dc4c", + "idName": "upgrade", + "name": "Upgrade bridge" } ] }, diff --git a/plugins/deviceplugins/philipshue/huebridge.cpp b/plugins/deviceplugins/philipshue/huebridge.cpp index 7e1f50ef..667cf2ac 100644 --- a/plugins/deviceplugins/philipshue/huebridge.cpp +++ b/plugins/deviceplugins/philipshue/huebridge.cpp @@ -144,8 +144,24 @@ QPair HueBridge::createCheckUpdatesRequest() updateMap.insert("checkforupdate", true); QVariantMap requestMap; - requestMap.insert("swupdate", updateMap); requestMap.insert("portalservices", true); + requestMap.insert("swupdate", updateMap); + + QJsonDocument jsonDoc = QJsonDocument::fromVariant(requestMap); + + QNetworkRequest request(QUrl("http://" + hostAddress().toString() + "/api/" + apiKey() + "/config")); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + + return QPair(request, jsonDoc.toJson()); +} + +QPair HueBridge::createUpgradeRequest() +{ + QVariantMap updateMap; + updateMap.insert("updatestate", 3); + + QVariantMap requestMap; + requestMap.insert("swupdate", updateMap); QJsonDocument jsonDoc = QJsonDocument::fromVariant(requestMap); diff --git a/plugins/deviceplugins/philipshue/huebridge.h b/plugins/deviceplugins/philipshue/huebridge.h index 5f338a34..8433d643 100644 --- a/plugins/deviceplugins/philipshue/huebridge.h +++ b/plugins/deviceplugins/philipshue/huebridge.h @@ -63,6 +63,7 @@ public: QPair createSearchLightsRequest(); QPair createSearchSensorsRequest(); QPair createCheckUpdatesRequest(); + QPair createUpgradeRequest(); private: QString m_id;