Rename hue outdoor sensor to motion sensor since indoor and outdoor work the same way
This commit is contained in:
parent
c99ce3236a
commit
2d65aa59af
@ -38,19 +38,19 @@
|
|||||||
IntegrationPluginZigbeePhilipsHue::IntegrationPluginZigbeePhilipsHue()
|
IntegrationPluginZigbeePhilipsHue::IntegrationPluginZigbeePhilipsHue()
|
||||||
{
|
{
|
||||||
m_ieeeAddressParamTypeIds[dimmerSwitchThingClassId] = dimmerSwitchThingIeeeAddressParamTypeId;
|
m_ieeeAddressParamTypeIds[dimmerSwitchThingClassId] = dimmerSwitchThingIeeeAddressParamTypeId;
|
||||||
m_ieeeAddressParamTypeIds[outdoorSensorThingClassId] = outdoorSensorThingIeeeAddressParamTypeId;
|
m_ieeeAddressParamTypeIds[motionSensorThingClassId] = motionSensorThingIeeeAddressParamTypeId;
|
||||||
|
|
||||||
m_networkUuidParamTypeIds[dimmerSwitchThingClassId] = dimmerSwitchThingNetworkUuidParamTypeId;
|
m_networkUuidParamTypeIds[dimmerSwitchThingClassId] = dimmerSwitchThingNetworkUuidParamTypeId;
|
||||||
m_networkUuidParamTypeIds[outdoorSensorThingClassId] = outdoorSensorThingNetworkUuidParamTypeId;
|
m_networkUuidParamTypeIds[motionSensorThingClassId] = motionSensorThingNetworkUuidParamTypeId;
|
||||||
|
|
||||||
m_connectedStateTypeIds[dimmerSwitchThingClassId] = dimmerSwitchConnectedStateTypeId;
|
m_connectedStateTypeIds[dimmerSwitchThingClassId] = dimmerSwitchConnectedStateTypeId;
|
||||||
m_connectedStateTypeIds[outdoorSensorThingClassId] = outdoorSensorConnectedStateTypeId;
|
m_connectedStateTypeIds[motionSensorThingClassId] = motionSensorConnectedStateTypeId;
|
||||||
|
|
||||||
m_signalStrengthStateTypeIds[dimmerSwitchThingClassId] = dimmerSwitchSignalStrengthStateTypeId;
|
m_signalStrengthStateTypeIds[dimmerSwitchThingClassId] = dimmerSwitchSignalStrengthStateTypeId;
|
||||||
m_signalStrengthStateTypeIds[outdoorSensorThingClassId] = outdoorSensorSignalStrengthStateTypeId;
|
m_signalStrengthStateTypeIds[motionSensorThingClassId] = motionSensorSignalStrengthStateTypeId;
|
||||||
|
|
||||||
m_versionStateTypeIds[dimmerSwitchThingClassId] = dimmerSwitchVersionStateTypeId;
|
m_versionStateTypeIds[dimmerSwitchThingClassId] = dimmerSwitchVersionStateTypeId;
|
||||||
m_versionStateTypeIds[outdoorSensorThingClassId] = outdoorSensorVersionStateTypeId;
|
m_versionStateTypeIds[motionSensorThingClassId] = motionSensorVersionStateTypeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString IntegrationPluginZigbeePhilipsHue::name() const
|
QString IntegrationPluginZigbeePhilipsHue::name() const
|
||||||
@ -89,8 +89,8 @@ bool IntegrationPluginZigbeePhilipsHue::handleNode(ZigbeeNode *node, const QUuid
|
|||||||
endpoinTwo->deviceId() == Zigbee::HomeAutomationDeviceOccupacySensor) {
|
endpoinTwo->deviceId() == Zigbee::HomeAutomationDeviceOccupacySensor) {
|
||||||
|
|
||||||
qCDebug(dcZigbeePhilipsHue()) << "Handeling Hue outdoor sensor" << node << endpointOne << endpoinTwo;
|
qCDebug(dcZigbeePhilipsHue()) << "Handeling Hue outdoor sensor" << node << endpointOne << endpoinTwo;
|
||||||
createThing(outdoorSensorThingClassId, networkUuid, node);
|
createThing(motionSensorThingClassId, networkUuid, node);
|
||||||
initOutdoorSensor(node);
|
initMotionSensor(node);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -209,7 +209,7 @@ void IntegrationPluginZigbeePhilipsHue::setupThing(ThingSetupInfo *info)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (thing->thingClassId() == outdoorSensorThingClassId) {
|
if (thing->thingClassId() == motionSensorThingClassId) {
|
||||||
ZigbeeNodeEndpoint *endpointHa = node->getEndpoint(0x02);
|
ZigbeeNodeEndpoint *endpointHa = node->getEndpoint(0x02);
|
||||||
|
|
||||||
// Set the version
|
// Set the version
|
||||||
@ -222,14 +222,14 @@ void IntegrationPluginZigbeePhilipsHue::setupThing(ThingSetupInfo *info)
|
|||||||
} else {
|
} else {
|
||||||
// Only set the initial state if the attribute already exists
|
// Only set the initial state if the attribute already exists
|
||||||
if (powerCluster->hasAttribute(ZigbeeClusterPowerConfiguration::AttributeBatteryPercentageRemaining)) {
|
if (powerCluster->hasAttribute(ZigbeeClusterPowerConfiguration::AttributeBatteryPercentageRemaining)) {
|
||||||
thing->setStateValue(outdoorSensorBatteryLevelStateTypeId, powerCluster->batteryPercentage());
|
thing->setStateValue(motionSensorBatteryLevelStateTypeId, powerCluster->batteryPercentage());
|
||||||
thing->setStateValue(outdoorSensorBatteryCriticalStateTypeId, (powerCluster->batteryPercentage() < 10.0));
|
thing->setStateValue(motionSensorBatteryCriticalStateTypeId, (powerCluster->batteryPercentage() < 10.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(powerCluster, &ZigbeeClusterPowerConfiguration::batteryPercentageChanged, thing, [=](double percentage){
|
connect(powerCluster, &ZigbeeClusterPowerConfiguration::batteryPercentageChanged, thing, [=](double percentage){
|
||||||
qCDebug(dcZigbeePhilipsHue()) << "Battery percentage changed" << percentage << "%" << thing;
|
qCDebug(dcZigbeePhilipsHue()) << "Battery percentage changed" << percentage << "%" << thing;
|
||||||
thing->setStateValue(outdoorSensorBatteryLevelStateTypeId, percentage);
|
thing->setStateValue(motionSensorBatteryLevelStateTypeId, percentage);
|
||||||
thing->setStateValue(outdoorSensorBatteryCriticalStateTypeId, (percentage < 10.0));
|
thing->setStateValue(motionSensorBatteryCriticalStateTypeId, (percentage < 10.0));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,12 +242,12 @@ void IntegrationPluginZigbeePhilipsHue::setupThing(ThingSetupInfo *info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
connect(m_presenceTimer, &PluginTimer::timeout, thing, [thing](){
|
connect(m_presenceTimer, &PluginTimer::timeout, thing, [thing](){
|
||||||
if (thing->stateValue(outdoorSensorIsPresentStateTypeId).toBool()) {
|
if (thing->stateValue(motionSensorIsPresentStateTypeId).toBool()) {
|
||||||
int timeout = thing->setting(outdoorSensorSettingsTimeoutParamTypeId).toInt();
|
int timeout = thing->setting(motionSensorSettingsTimeoutParamTypeId).toInt();
|
||||||
QDateTime lastSeenTime = QDateTime::fromMSecsSinceEpoch(thing->stateValue(outdoorSensorLastSeenTimeStateTypeId).toULongLong() * 1000);
|
QDateTime lastSeenTime = QDateTime::fromMSecsSinceEpoch(thing->stateValue(motionSensorLastSeenTimeStateTypeId).toULongLong() * 1000);
|
||||||
if (lastSeenTime.addSecs(timeout) < QDateTime::currentDateTime()) {
|
if (lastSeenTime.addSecs(timeout) < QDateTime::currentDateTime()) {
|
||||||
qCDebug(dcZigbeePhilipsHue()) << thing << "Presence timeout";
|
qCDebug(dcZigbeePhilipsHue()) << thing << "Presence timeout";
|
||||||
thing->setStateValue(outdoorSensorIsPresentStateTypeId, false);
|
thing->setStateValue(motionSensorIsPresentStateTypeId, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -256,8 +256,8 @@ void IntegrationPluginZigbeePhilipsHue::setupThing(ThingSetupInfo *info)
|
|||||||
qCDebug(dcZigbeePhilipsHue()) << thing << "occupancy cluster changed" << occupancy;
|
qCDebug(dcZigbeePhilipsHue()) << thing << "occupancy cluster changed" << occupancy;
|
||||||
// Only change the state if the it changed to true, it will be disabled by the timer
|
// Only change the state if the it changed to true, it will be disabled by the timer
|
||||||
if (occupancy) {
|
if (occupancy) {
|
||||||
thing->setStateValue(outdoorSensorIsPresentStateTypeId, true);
|
thing->setStateValue(motionSensorIsPresentStateTypeId, true);
|
||||||
thing->setStateValue(outdoorSensorLastSeenTimeStateTypeId, QDateTime::currentMSecsSinceEpoch() / 1000);
|
thing->setStateValue(motionSensorLastSeenTimeStateTypeId, QDateTime::currentMSecsSinceEpoch() / 1000);
|
||||||
m_presenceTimer->start();
|
m_presenceTimer->start();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -269,12 +269,12 @@ void IntegrationPluginZigbeePhilipsHue::setupThing(ThingSetupInfo *info)
|
|||||||
} else {
|
} else {
|
||||||
// Only set the state if the cluster actually has the attribute
|
// Only set the state if the cluster actually has the attribute
|
||||||
if (temperatureCluster->hasAttribute(ZigbeeClusterTemperatureMeasurement::AttributeMeasuredValue)) {
|
if (temperatureCluster->hasAttribute(ZigbeeClusterTemperatureMeasurement::AttributeMeasuredValue)) {
|
||||||
thing->setStateValue(outdoorSensorTemperatureStateTypeId, temperatureCluster->temperature());
|
thing->setStateValue(motionSensorTemperatureStateTypeId, temperatureCluster->temperature());
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(temperatureCluster, &ZigbeeClusterTemperatureMeasurement::temperatureChanged, thing, [thing](double temperature){
|
connect(temperatureCluster, &ZigbeeClusterTemperatureMeasurement::temperatureChanged, thing, [thing](double temperature){
|
||||||
qCDebug(dcZigbeePhilipsHue()) << thing << "temperature changed" << temperature << "°C";
|
qCDebug(dcZigbeePhilipsHue()) << thing << "temperature changed" << temperature << "°C";
|
||||||
thing->setStateValue(outdoorSensorTemperatureStateTypeId, temperature);
|
thing->setStateValue(motionSensorTemperatureStateTypeId, temperature);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -286,13 +286,13 @@ void IntegrationPluginZigbeePhilipsHue::setupThing(ThingSetupInfo *info)
|
|||||||
if (illuminanceCluster->hasAttribute(ZigbeeClusterIlluminanceMeasurment::AttributeMeasuredValue)) {
|
if (illuminanceCluster->hasAttribute(ZigbeeClusterIlluminanceMeasurment::AttributeMeasuredValue)) {
|
||||||
int convertedValue = pow(10, illuminanceCluster->illuminance() / 10000) - 1;
|
int convertedValue = pow(10, illuminanceCluster->illuminance() / 10000) - 1;
|
||||||
qCDebug(dcZigbeePhilipsHue()) << thing << "illuminance" << illuminanceCluster->illuminance() << "-->" << convertedValue << "lux";
|
qCDebug(dcZigbeePhilipsHue()) << thing << "illuminance" << illuminanceCluster->illuminance() << "-->" << convertedValue << "lux";
|
||||||
thing->setStateValue(outdoorSensorLightIntensityStateTypeId, convertedValue);
|
thing->setStateValue(motionSensorLightIntensityStateTypeId, convertedValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(illuminanceCluster, &ZigbeeClusterIlluminanceMeasurment::illuminanceChanged, thing, [thing](quint16 illuminance){
|
connect(illuminanceCluster, &ZigbeeClusterIlluminanceMeasurment::illuminanceChanged, thing, [thing](quint16 illuminance){
|
||||||
int convertedValue = pow(10, illuminance / 10000) - 1;
|
int convertedValue = pow(10, illuminance / 10000) - 1;
|
||||||
qCDebug(dcZigbeePhilipsHue()) << thing << "illuminance changed" << illuminance << "-->" << convertedValue << "lux";
|
qCDebug(dcZigbeePhilipsHue()) << thing << "illuminance changed" << illuminance << "-->" << convertedValue << "lux";
|
||||||
thing->setStateValue(outdoorSensorLightIntensityStateTypeId, convertedValue);
|
thing->setStateValue(motionSensorLightIntensityStateTypeId, convertedValue);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -424,7 +424,7 @@ void IntegrationPluginZigbeePhilipsHue::initDimmerSwitch(ZigbeeNode *node)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntegrationPluginZigbeePhilipsHue::initOutdoorSensor(ZigbeeNode *node)
|
void IntegrationPluginZigbeePhilipsHue::initMotionSensor(ZigbeeNode *node)
|
||||||
{
|
{
|
||||||
ZigbeeNodeEndpoint *endpointHa = node->getEndpoint(0x02);
|
ZigbeeNodeEndpoint *endpointHa = node->getEndpoint(0x02);
|
||||||
|
|
||||||
@ -551,15 +551,13 @@ void IntegrationPluginZigbeePhilipsHue::initOutdoorSensor(ZigbeeNode *node)
|
|||||||
qCDebug(dcZigbeePhilipsHue()) << "Read illuminance measurement cluster attributes finished successfully";
|
qCDebug(dcZigbeePhilipsHue()) << "Read illuminance measurement cluster attributes finished successfully";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure attribute reporting
|
// Configure attribute reporting for illuminance
|
||||||
|
|
||||||
// Configure attribute reporting for temperature
|
|
||||||
ZigbeeClusterLibrary::AttributeReportingConfiguration reportingConfig;
|
ZigbeeClusterLibrary::AttributeReportingConfiguration reportingConfig;
|
||||||
reportingConfig.attributeId = ZigbeeClusterIlluminanceMeasurment::AttributeMeasuredValue;
|
reportingConfig.attributeId = ZigbeeClusterIlluminanceMeasurment::AttributeMeasuredValue;
|
||||||
reportingConfig.dataType = Zigbee::Uint16;
|
reportingConfig.dataType = Zigbee::Uint16;
|
||||||
reportingConfig.minReportingInterval = 300;
|
reportingConfig.minReportingInterval = 5;
|
||||||
reportingConfig.maxReportingInterval = 600;
|
reportingConfig.maxReportingInterval = 600;
|
||||||
reportingConfig.reportableChange = ZigbeeDataType(static_cast<quint16>(1)).data();
|
reportingConfig.reportableChange = ZigbeeDataType(static_cast<quint16>(100)).data();
|
||||||
|
|
||||||
qCDebug(dcZigbeePhilipsHue()) << "Configure attribute reporting for illuminance measurement cluster to coordinator";
|
qCDebug(dcZigbeePhilipsHue()) << "Configure attribute reporting for illuminance measurement cluster to coordinator";
|
||||||
ZigbeeClusterReply *reportingReply = endpointHa->getInputCluster(ZigbeeClusterLibrary::ClusterIdIlluminanceMeasurement)->configureReporting({reportingConfig});
|
ZigbeeClusterReply *reportingReply = endpointHa->getInputCluster(ZigbeeClusterLibrary::ClusterIdIlluminanceMeasurement)->configureReporting({reportingConfig});
|
||||||
|
|||||||
@ -70,7 +70,7 @@ private:
|
|||||||
void createThing(const ThingClassId &thingClassId, const QUuid &networkUuid, ZigbeeNode *node);
|
void createThing(const ThingClassId &thingClassId, const QUuid &networkUuid, ZigbeeNode *node);
|
||||||
|
|
||||||
void initDimmerSwitch(ZigbeeNode *node);
|
void initDimmerSwitch(ZigbeeNode *node);
|
||||||
void initOutdoorSensor(ZigbeeNode *node);
|
void initMotionSensor(ZigbeeNode *node);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -102,8 +102,8 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "outdoorSensor",
|
"name": "motionSensor",
|
||||||
"displayName": "Hue outdoor sensor",
|
"displayName": "Hue motion sensor",
|
||||||
"id": "031c45d1-e782-4f91-9f05-259d6b81c7ef",
|
"id": "031c45d1-e782-4f91-9f05-259d6b81c7ef",
|
||||||
"setupMethod": "JustAdd",
|
"setupMethod": "JustAdd",
|
||||||
"createMethods": [ "Auto" ],
|
"createMethods": [ "Auto" ],
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user