function DelayDetector1(itemName, motionFbTopic, relayFbTopic, timeout) {
/Logic/
var timerID = -1;
function showError() {
log(“delay detected:”, itemName, motionFbTopic, relayFbTopic);
}
function startTimer() {
timerID = setTimeout(showError, timeout);
}
defineRule(“rule” + itemName, {
whenChanged: relayFbTopic,
then: function(value, device, param) {
if (value) {
clearTimeout(timerID);
}
}
});
trackMqtt(motionFbTopic, function(message){
var fb = JSON.parse(message.value);
if (fb.occupancy) {
startTimer();
}
});
}
function DelayDetector2(itemName, motionFbTopic, relayFbTopic, timeout, maxTimeout) {
/Logic/
var timerID = -1;
var startMeasureDate;
var stopMeasureDate;
var isMeasuring = false;
function showError(delayInMs) {
log(“delay detected:”, itemName, motionFbTopic, relayFbTopic, delayInMs / 1000);
}
function startMeasure() {
if (!isMeasuring) {
isMeasuring = true;
startMeasureDate = new Date();
timerID = setTimeout(stopMeasureMaxTimeout, maxTimeout);
}
}
function stopMeasure() {
if (isMeasuring) {
clearTimeout(timerID);
stopMeasureDate = new Date();
var delayInMs = stopMeasureDate.getTime() - startMeasureDate.getTime();
if (delayInMs >= timeout && delayInMs <= maxTimeout) {
showError(delayInMs);
}
isMeasuring = false;
}
}
function stopMeasureMaxTimeout() {
if (isMeasuring) {
isMeasuring = false;
}
}
defineRule(“rule” + itemName, {
whenChanged: relayFbTopic,
then: function(value, device, param) {
if (value) {
stopMeasure();
}
}
});
trackMqtt(motionFbTopic, function(message) {
var fb = JSON.parse(message.value);
if (fb.occupancy) {
startMeasure();
}
});
}
function DelayDetector2Illuminance(itemName, motionFbTopic, illuminanceFbTopic, illuminanceBorder, relayFbTopic, timeout, maxTimeout) {
/Logic/
var timerID = -1;
var illuminance;
var startMeasureDate;
var stopMeasureDate;
var isMeasuring = false;
function showError(delayInMs) {
log(“delay detected:”, itemName, motionFbTopic, relayFbTopic, delayInMs / 1000);
}
function startMeasure() {
if (!isMeasuring) {
isMeasuring = true;
startMeasureDate = new Date();
timerID = setTimeout(stopMeasureMaxTimeout, maxTimeout);
}
}
function stopMeasure() {
if (isMeasuring) {
clearTimeout(timerID);
stopMeasureDate = new Date();
var delayInMs = stopMeasureDate.getTime() - startMeasureDate.getTime();
if (illuminance < illuminanceBorder && delayInMs >= timeout && delayInMs <= maxTimeout) {
showError(delayInMs);
}
isMeasuring = false;
}
}
function stopMeasureMaxTimeout() {
if (isMeasuring) {
isMeasuring = false;
}
}
defineRule(“rule” + itemName, {
whenChanged: relayFbTopic,
then: function(value, device, param) {
if (value) {
stopMeasure();
}
}
});
trackMqtt(motionFbTopic, function(message) {
var fb = JSON.parse(message.value);
if (fb.occupancy) {
startMeasure();
}
});
trackMqtt(illuminanceFbTopic, function(message) {
var fb = JSON.parse(message.value);
illuminance = fb.illuminance;
});
}
new DelayDetector2(“CheckMS6.2”, “zigbee2mqtt/Aqara_M&I_sensor_6.2”, “MR6C_7/K2”, 1000, 30000);
new DelayDetector2(“CheckMS9”, “zigbee2mqtt/Aqara_M&I_sensor_9”, “MR6C_3/K4”, 1000, 30000);
new DelayDetector2(“CheckMS10”, “zigbee2mqtt/Aqara_M&I_sensor_10”, “MR6C_3/K2”, 1000, 30000);
new DelayDetector2(“CheckMS11”, “zigbee2mqtt/Aqara_M&I_sensor_11”, “MR6C_8/K2”, 1000, 30000);
new DelayDetector2(“CheckMS12”, “zigbee2mqtt/Aqara_M&I_sensor_12”, “MR6C_8/K5”, 1000, 30000);
new DelayDetector2Illuminance(“CheckMS3”, “zigbee2mqtt/Aqara_M&I_sensor_3”, “zigbee2mqtt/Aqara_M&I_sensor_3”, 20, “MR6C_2/K5”, 1000, 30000);
new DelayDetector2Illuminance(“CheckMS5”, “zigbee2mqtt/Aqara_M&I_sensor_5”, “zigbee2mqtt/Aqara_M&I_sensor_5”, 20, “MR6C_5/K3”, 1000, 30000);
new DelayDetector2Illuminance(“CheckMS6.1”, “zigbee2mqtt/Aqara_M&I_sensor_6.1”, “zigbee2mqtt/Aqara_M&I_sensor_6.1”, 20, “MR6C_7/K5”, 1000, 30000);