fix hue naming

Current master, if renaming a hue light is reset after a nymea restart because
the plugin reads the light name from the bridge on every start and overwrites
the nymea configured name again.

Also drops the redundant name device parameter.
This commit is contained in:
Michael Zanetti 2018-11-23 10:45:08 +01:00
parent d4b7d78a96
commit 5ad130a35a
2 changed files with 8 additions and 70 deletions

View File

@ -118,7 +118,6 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev
m_unconfiguredBridges.removeAll(b); m_unconfiguredBridges.removeAll(b);
qCDebug(dcPhilipsHue) << "Setup unconfigured Hue Bridge" << b->name(); qCDebug(dcPhilipsHue) << "Setup unconfigured Hue Bridge" << b->name();
// set data which was not known during discovery // set data which was not known during discovery
device->setParamValue(bridgeDeviceNameParamTypeId, b->name());
device->setParamValue(bridgeDeviceApiKeyParamTypeId, b->apiKey()); device->setParamValue(bridgeDeviceApiKeyParamTypeId, b->apiKey());
device->setParamValue(bridgeDeviceZigbeeChannelParamTypeId, b->zigbeeChannel()); device->setParamValue(bridgeDeviceZigbeeChannelParamTypeId, b->zigbeeChannel());
device->setParamValue(bridgeDeviceIdParamTypeId, b->id()); device->setParamValue(bridgeDeviceIdParamTypeId, b->id());
@ -137,7 +136,6 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev
bridge->setId(device->paramValue(bridgeDeviceIdParamTypeId).toString()); bridge->setId(device->paramValue(bridgeDeviceIdParamTypeId).toString());
bridge->setApiKey(device->paramValue(bridgeDeviceApiKeyParamTypeId).toString()); bridge->setApiKey(device->paramValue(bridgeDeviceApiKeyParamTypeId).toString());
bridge->setHostAddress(QHostAddress(device->paramValue(bridgeDeviceHostParamTypeId).toString())); bridge->setHostAddress(QHostAddress(device->paramValue(bridgeDeviceHostParamTypeId).toString()));
bridge->setName(device->paramValue(bridgeDeviceNameParamTypeId).toString());
bridge->setMacAddress(device->paramValue(bridgeDeviceMacParamTypeId).toString()); bridge->setMacAddress(device->paramValue(bridgeDeviceMacParamTypeId).toString());
bridge->setZigbeeChannel(device->paramValue(bridgeDeviceZigbeeChannelParamTypeId).toInt()); bridge->setZigbeeChannel(device->paramValue(bridgeDeviceZigbeeChannelParamTypeId).toInt());
m_bridges.insert(bridge, device); m_bridges.insert(bridge, device);
@ -155,7 +153,6 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev
hueLight->setHostAddress(bridge->hostAddress()); hueLight->setHostAddress(bridge->hostAddress());
hueLight->setApiKey(bridge->apiKey()); hueLight->setApiKey(bridge->apiKey());
hueLight->setId(device->paramValue(colorLightDeviceLightIdParamTypeId).toInt()); hueLight->setId(device->paramValue(colorLightDeviceLightIdParamTypeId).toInt());
hueLight->setName(device->paramValue(colorLightDeviceNameParamTypeId).toString());
hueLight->setModelId(device->paramValue(colorLightDeviceModelIdParamTypeId).toString()); hueLight->setModelId(device->paramValue(colorLightDeviceModelIdParamTypeId).toString());
hueLight->setUuid(device->paramValue(colorLightDeviceUuidParamTypeId).toString()); hueLight->setUuid(device->paramValue(colorLightDeviceUuidParamTypeId).toString());
hueLight->setType(device->paramValue(colorLightDeviceTypeParamTypeId).toString()); hueLight->setType(device->paramValue(colorLightDeviceTypeParamTypeId).toString());
@ -163,10 +160,8 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev
connect(hueLight, &HueLight::stateChanged, this, &DevicePluginPhilipsHue::lightStateChanged); connect(hueLight, &HueLight::stateChanged, this, &DevicePluginPhilipsHue::lightStateChanged);
m_lights.insert(hueLight, device); m_lights.insert(hueLight, device);
device->setName(hueLight->name());
refreshLight(device); refreshLight(device);
setLightName(device, device->paramValue(colorLightDeviceNameParamTypeId).toString()); setLightName(device, device->name());
return DeviceManager::DeviceSetupStatusSuccess; return DeviceManager::DeviceSetupStatusSuccess;
} }
@ -180,7 +175,6 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev
hueLight->setHostAddress(bridge->hostAddress()); hueLight->setHostAddress(bridge->hostAddress());
hueLight->setApiKey(bridge->apiKey()); hueLight->setApiKey(bridge->apiKey());
hueLight->setId(device->paramValue(colorTemperatureLightDeviceLightIdParamTypeId).toInt()); hueLight->setId(device->paramValue(colorTemperatureLightDeviceLightIdParamTypeId).toInt());
hueLight->setName(device->paramValue(colorTemperatureLightDeviceNameParamTypeId).toString());
hueLight->setModelId(device->paramValue(colorTemperatureLightDeviceModelIdParamTypeId).toString()); hueLight->setModelId(device->paramValue(colorTemperatureLightDeviceModelIdParamTypeId).toString());
hueLight->setUuid(device->paramValue(colorTemperatureLightDeviceUuidParamTypeId).toString()); hueLight->setUuid(device->paramValue(colorTemperatureLightDeviceUuidParamTypeId).toString());
hueLight->setType(device->paramValue(colorTemperatureLightDeviceTypeParamTypeId).toString()); hueLight->setType(device->paramValue(colorTemperatureLightDeviceTypeParamTypeId).toString());
@ -188,10 +182,8 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev
connect(hueLight, &HueLight::stateChanged, this, &DevicePluginPhilipsHue::lightStateChanged); connect(hueLight, &HueLight::stateChanged, this, &DevicePluginPhilipsHue::lightStateChanged);
m_lights.insert(hueLight, device); m_lights.insert(hueLight, device);
device->setName(hueLight->name());
refreshLight(device); refreshLight(device);
setLightName(device, device->paramValue(colorTemperatureLightDeviceNameParamTypeId).toString()); setLightName(device, device->name());
return DeviceManager::DeviceSetupStatusSuccess; return DeviceManager::DeviceSetupStatusSuccess;
} }
@ -205,19 +197,16 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev
hueLight->setHostAddress(bridge->hostAddress()); hueLight->setHostAddress(bridge->hostAddress());
hueLight->setApiKey(bridge->apiKey()); hueLight->setApiKey(bridge->apiKey());
hueLight->setId(device->paramValue(dimmableLightDeviceLightIdParamTypeId).toInt()); hueLight->setId(device->paramValue(dimmableLightDeviceLightIdParamTypeId).toInt());
hueLight->setName(device->paramValue(dimmableLightDeviceNameParamTypeId).toString());
hueLight->setModelId(device->paramValue(dimmableLightDeviceModelIdParamTypeId).toString()); hueLight->setModelId(device->paramValue(dimmableLightDeviceModelIdParamTypeId).toString());
hueLight->setUuid(device->paramValue(dimmableLightDeviceUuidParamTypeId).toString()); hueLight->setUuid(device->paramValue(dimmableLightDeviceUuidParamTypeId).toString());
hueLight->setType(device->paramValue(dimmableLightDeviceTypeParamTypeId).toString()); hueLight->setType(device->paramValue(dimmableLightDeviceTypeParamTypeId).toString());
connect(hueLight, &HueLight::stateChanged, this, &DevicePluginPhilipsHue::lightStateChanged); connect(hueLight, &HueLight::stateChanged, this, &DevicePluginPhilipsHue::lightStateChanged);
device->setName(hueLight->name());
m_lights.insert(hueLight, device); m_lights.insert(hueLight, device);
refreshLight(device); refreshLight(device);
setLightName(device, device->paramValue(dimmableLightDeviceNameParamTypeId).toString()); setLightName(device, device->name());
return DeviceManager::DeviceSetupStatusSuccess; return DeviceManager::DeviceSetupStatusSuccess;
} }
@ -230,13 +219,10 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev
hueRemote->setHostAddress(bridge->hostAddress()); hueRemote->setHostAddress(bridge->hostAddress());
hueRemote->setApiKey(bridge->apiKey()); hueRemote->setApiKey(bridge->apiKey());
hueRemote->setId(device->paramValue(remoteDeviceSensorIdParamTypeId).toInt()); hueRemote->setId(device->paramValue(remoteDeviceSensorIdParamTypeId).toInt());
hueRemote->setName(device->paramValue(remoteDeviceNameParamTypeId).toString());
hueRemote->setModelId(device->paramValue(remoteDeviceModelIdParamTypeId).toString()); hueRemote->setModelId(device->paramValue(remoteDeviceModelIdParamTypeId).toString());
hueRemote->setType(device->paramValue(remoteDeviceTypeParamTypeId).toString()); hueRemote->setType(device->paramValue(remoteDeviceTypeParamTypeId).toString());
hueRemote->setUuid(device->paramValue(remoteDeviceUuidParamTypeId).toString()); hueRemote->setUuid(device->paramValue(remoteDeviceUuidParamTypeId).toString());
device->setName(hueRemote->name());
connect(hueRemote, &HueRemote::stateChanged, this, &DevicePluginPhilipsHue::remoteStateChanged); connect(hueRemote, &HueRemote::stateChanged, this, &DevicePluginPhilipsHue::remoteStateChanged);
connect(hueRemote, &HueRemote::buttonPressed, this, &DevicePluginPhilipsHue::onRemoteButtonEvent); connect(hueRemote, &HueRemote::buttonPressed, this, &DevicePluginPhilipsHue::onRemoteButtonEvent);
@ -772,7 +758,6 @@ void DevicePluginPhilipsHue::onUpnpDiscoveryFinished()
if (upnpDevice.modelDescription().contains("Philips")) { if (upnpDevice.modelDescription().contains("Philips")) {
DeviceDescriptor descriptor(bridgeDeviceClassId, "Philips Hue Bridge", upnpDevice.hostAddress().toString()); DeviceDescriptor descriptor(bridgeDeviceClassId, "Philips Hue Bridge", upnpDevice.hostAddress().toString());
ParamList params; ParamList params;
params.append(Param(bridgeDeviceNameParamTypeId, upnpDevice.friendlyName()));
params.append(Param(bridgeDeviceHostParamTypeId, upnpDevice.hostAddress().toString())); params.append(Param(bridgeDeviceHostParamTypeId, upnpDevice.hostAddress().toString()));
params.append(Param(bridgeDeviceApiKeyParamTypeId, QString())); params.append(Param(bridgeDeviceApiKeyParamTypeId, QString()));
params.append(Param(bridgeDeviceMacParamTypeId, QString())); params.append(Param(bridgeDeviceMacParamTypeId, QString()));
@ -895,7 +880,6 @@ void DevicePluginPhilipsHue::processNUpnpResponse(const QByteArray &data)
QVariantMap bridgeMap = bridgeVariant.toMap(); QVariantMap bridgeMap = bridgeVariant.toMap();
DeviceDescriptor descriptor(bridgeDeviceClassId, "Philips Hue Bridge", bridgeMap.value("internalipaddress").toString()); DeviceDescriptor descriptor(bridgeDeviceClassId, "Philips Hue Bridge", bridgeMap.value("internalipaddress").toString());
ParamList params; ParamList params;
params.append(Param(bridgeDeviceNameParamTypeId, "Philips hue"));
params.append(Param(bridgeDeviceHostParamTypeId, bridgeMap.value("internalipaddress").toString())); params.append(Param(bridgeDeviceHostParamTypeId, bridgeMap.value("internalipaddress").toString()));
params.append(Param(bridgeDeviceApiKeyParamTypeId, QString())); params.append(Param(bridgeDeviceApiKeyParamTypeId, QString()));
params.append(Param(bridgeDeviceMacParamTypeId, QString())); params.append(Param(bridgeDeviceMacParamTypeId, QString()));
@ -945,9 +929,8 @@ void DevicePluginPhilipsHue::processBridgeLightDiscoveryResponse(Device *device,
continue; continue;
if (lightMap.value("type").toString() == "Dimmable light") { if (lightMap.value("type").toString() == "Dimmable light") {
DeviceDescriptor descriptor(dimmableLightDeviceClassId, "Philips Hue White Light", lightMap.value("name").toString(), device->id()); DeviceDescriptor descriptor(dimmableLightDeviceClassId, lightMap.value("name").toString(), "Philips Hue White Light", device->id());
ParamList params; ParamList params;
params.append(Param(dimmableLightDeviceNameParamTypeId, lightMap.value("name").toString()));
params.append(Param(dimmableLightDeviceModelIdParamTypeId, model)); params.append(Param(dimmableLightDeviceModelIdParamTypeId, model));
params.append(Param(dimmableLightDeviceTypeParamTypeId, lightMap.value("type").toString())); params.append(Param(dimmableLightDeviceTypeParamTypeId, lightMap.value("type").toString()));
params.append(Param(dimmableLightDeviceUuidParamTypeId, uuid)); params.append(Param(dimmableLightDeviceUuidParamTypeId, uuid));
@ -957,9 +940,8 @@ void DevicePluginPhilipsHue::processBridgeLightDiscoveryResponse(Device *device,
qCDebug(dcPhilipsHue) << "Found new dimmable light" << lightMap.value("name").toString() << model; qCDebug(dcPhilipsHue) << "Found new dimmable light" << lightMap.value("name").toString() << model;
} else if (lightMap.value("type").toString() == "Color temperature light") { } else if (lightMap.value("type").toString() == "Color temperature light") {
DeviceDescriptor descriptor(colorTemperatureLightDeviceClassId, "Philips Hue White Light", lightMap.value("name").toString(), device->id()); DeviceDescriptor descriptor(colorTemperatureLightDeviceClassId, lightMap.value("name").toString(), "Philips Hue Color Temperature Light", device->id());
ParamList params; ParamList params;
params.append(Param(colorTemperatureLightDeviceNameParamTypeId, lightMap.value("name").toString()));
params.append(Param(colorTemperatureLightDeviceModelIdParamTypeId, model)); params.append(Param(colorTemperatureLightDeviceModelIdParamTypeId, model));
params.append(Param(colorTemperatureLightDeviceTypeParamTypeId, lightMap.value("type").toString())); params.append(Param(colorTemperatureLightDeviceTypeParamTypeId, lightMap.value("type").toString()));
params.append(Param(colorTemperatureLightDeviceUuidParamTypeId, uuid)); params.append(Param(colorTemperatureLightDeviceUuidParamTypeId, uuid));
@ -969,9 +951,8 @@ void DevicePluginPhilipsHue::processBridgeLightDiscoveryResponse(Device *device,
qCDebug(dcPhilipsHue) << "Found new color temperature light" << lightMap.value("name").toString() << model; qCDebug(dcPhilipsHue) << "Found new color temperature light" << lightMap.value("name").toString() << model;
} else { } else {
DeviceDescriptor descriptor(colorLightDeviceClassId, "Philips Hue Light", lightMap.value("name").toString(), device->id()); DeviceDescriptor descriptor(colorLightDeviceClassId, lightMap.value("name").toString(), "Philips Hue Color Light", device->id());
ParamList params; ParamList params;
params.append(Param(colorLightDeviceNameParamTypeId, lightMap.value("name").toString()));
params.append(Param(colorLightDeviceModelIdParamTypeId, model)); params.append(Param(colorLightDeviceModelIdParamTypeId, model));
params.append(Param(colorLightDeviceTypeParamTypeId, lightMap.value("type").toString())); params.append(Param(colorLightDeviceTypeParamTypeId, lightMap.value("type").toString()));
params.append(Param(colorLightDeviceUuidParamTypeId, uuid)); params.append(Param(colorLightDeviceUuidParamTypeId, uuid));
@ -1023,9 +1004,8 @@ void DevicePluginPhilipsHue::processBridgeSensorDiscoveryResponse(Device *device
continue; continue;
if (sensorMap.value("type").toString() == "ZLLSwitch") { if (sensorMap.value("type").toString() == "ZLLSwitch") {
DeviceDescriptor descriptor(remoteDeviceClassId, "Philips Hue Remote", sensorMap.value("name").toString(), device->id()); DeviceDescriptor descriptor(remoteDeviceClassId, sensorMap.value("name").toString(), "Philips Hue Remote", device->id());
ParamList params; ParamList params;
params.append(Param(remoteDeviceNameParamTypeId, sensorMap.value("name").toString()));
params.append(Param(remoteDeviceModelIdParamTypeId, model)); params.append(Param(remoteDeviceModelIdParamTypeId, model));
params.append(Param(remoteDeviceTypeParamTypeId, sensorMap.value("type").toString())); params.append(Param(remoteDeviceTypeParamTypeId, sensorMap.value("type").toString()));
params.append(Param(remoteDeviceUuidParamTypeId, uuid)); params.append(Param(remoteDeviceUuidParamTypeId, uuid));
@ -1034,7 +1014,7 @@ void DevicePluginPhilipsHue::processBridgeSensorDiscoveryResponse(Device *device
emit autoDevicesAppeared(remoteDeviceClassId, {descriptor}); emit autoDevicesAppeared(remoteDeviceClassId, {descriptor});
qCDebug(dcPhilipsHue) << "Found new remote" << sensorMap.value("name").toString() << model; qCDebug(dcPhilipsHue) << "Found new remote" << sensorMap.value("name").toString() << model;
} else if (sensorMap.value("type").toString() == "ZGPSwitch") { } else if (sensorMap.value("type").toString() == "ZGPSwitch") {
DeviceDescriptor descriptor(tapDeviceClassId, "Hue Tap", sensorMap.value("name").toString(), device->id()); DeviceDescriptor descriptor(tapDeviceClassId, sensorMap.value("name").toString(), "Philips Hue Tap", device->id());
ParamList params; ParamList params;
params.append(Param(tapDeviceUuidParamTypeId, uuid)); params.append(Param(tapDeviceUuidParamTypeId, uuid));
params.append(Param(tapDeviceModelIdParamTypeId, model)); params.append(Param(tapDeviceModelIdParamTypeId, model));

View File

@ -24,13 +24,6 @@
"setupMethod": "pushButton", "setupMethod": "pushButton",
"pairingInfo": "Please press the button on the Hue Bridge within 30 seconds before you continue", "pairingInfo": "Please press the button on the Hue Bridge within 30 seconds before you continue",
"paramTypes": [ "paramTypes": [
{
"id": "275b76f2-0174-4f26-b3ec-5f108baf8bdd",
"name": "name",
"displayName": "name",
"type" : "QString",
"inputType": "TextLine"
},
{ {
"id": "8bf5776a-d5a6-4600-8b27-481f0d803a8f", "id": "8bf5776a-d5a6-4600-8b27-481f0d803a8f",
"name": "apiKey", "name": "apiKey",
@ -163,13 +156,6 @@
"primaryActionTypeId": "90aaffe5-6a76-47d2-a14a-550f60390245", "primaryActionTypeId": "90aaffe5-6a76-47d2-a14a-550f60390245",
"createMethods": ["auto"], "createMethods": ["auto"],
"paramTypes": [ "paramTypes": [
{
"id": "0d71522c-08c0-4a66-bb5e-e31eb2dd41e5",
"name": "name",
"displayName": "name",
"type" : "QString",
"inputType": "TextLine"
},
{ {
"id": "095a463b-f59e-46b1-989a-a71f9cbe3e30", "id": "095a463b-f59e-46b1-989a-a71f9cbe3e30",
"name": "modelId", "name": "modelId",
@ -312,13 +298,6 @@
], ],
"createMethods": ["auto"], "createMethods": ["auto"],
"paramTypes": [ "paramTypes": [
{
"id": "1fcb0645-f552-4d81-9cc3-69ad5bbe2a85",
"name": "name",
"displayName": "name",
"type" : "QString",
"inputType": "TextLine"
},
{ {
"id": "e944795b-7863-488c-805b-a112b836bfbf", "id": "e944795b-7863-488c-805b-a112b836bfbf",
"name": "modelId", "name": "modelId",
@ -433,13 +412,6 @@
"primaryActionTypeId": "90aaffe5-6a76-47d2-a14a-550f60390245", "primaryActionTypeId": "90aaffe5-6a76-47d2-a14a-550f60390245",
"createMethods": ["auto"], "createMethods": ["auto"],
"paramTypes": [ "paramTypes": [
{
"id": "0d71522c-08c0-4a66-bb5e-e31eb2dd41e5",
"name": "name",
"displayName": "name",
"type" : "QString",
"inputType": "TextLine"
},
{ {
"id": "095a463b-f59e-46b1-989a-a71f9cbe3e30", "id": "095a463b-f59e-46b1-989a-a71f9cbe3e30",
"name": "modelId", "name": "modelId",
@ -538,13 +510,6 @@
"criticalStateTypeId": "19bb8d10-1b28-4ba3-99b7-a634138dcfde", "criticalStateTypeId": "19bb8d10-1b28-4ba3-99b7-a634138dcfde",
"createMethods": ["auto"], "createMethods": ["auto"],
"paramTypes": [ "paramTypes": [
{
"id": "0d71522c-08c0-4a66-bb5e-e31eb2dd41e5",
"name": "name",
"displayName": "name",
"type" : "QString",
"inputType": "TextLine"
},
{ {
"id": "095a463b-f59e-46b1-989a-a71f9cbe3e30", "id": "095a463b-f59e-46b1-989a-a71f9cbe3e30",
"name": "modelId", "name": "modelId",
@ -682,13 +647,6 @@
"interfaces": ["simplemultibutton", "connectable"], "interfaces": ["simplemultibutton", "connectable"],
"createMethods": ["auto"], "createMethods": ["auto"],
"paramTypes": [ "paramTypes": [
{
"id": "3d450f00-b521-4a2c-985f-046fad5122cb",
"name": "name",
"displayName": "name",
"type" : "QString",
"inputType": "TextLine"
},
{ {
"id": "62d92175-db3a-4da2-a72b-f58f34cb6911", "id": "62d92175-db3a-4da2-a72b-f58f34cb6911",
"name": "modelId", "name": "modelId",