Алгоритм работы света с датчиком присутствия
Условия: в жилой комнате и в коридоре, смежным с ней установлены инфракрасные датчики движения.
Задача: разработать алгоритм, при котором свет в комнате будет включаться при входе и поддерживаться при нахождении в ней человека. Т.к. комната жилая (спальня), свет не должен включаться при регистрации движения только в комнате, например, движении человека во сне.
Решение: датчик движения в коридоре в данном случае используется для определения направления движения человека системой, следовательно, свет должен включаться только после того, как система получает сигнал от обоих датчиков: в коридоре и комнате. Для поддержания работы света при нахождении человека в помещении необходимо завести новый Item и добавить ему metadata типа expire timer с временем, определяющим, сколько свет будет гореть после прекращения движения в комнате. Время работы таймера зависит от предполагаемой активности в комнате и корректируется при необходимости.
Дополнительно: при необходимости можно реализовать режим отключения автоматического управления светом с помощью отдельного Item.
rule "bedroom_motion"
when
Item BedroomMotionSensor changed from OFF to ON
then
if (BedroomAutolight.state==ON){ //Проверка включенного режима автоматики
if (BedroomLights.state == OFF){ //Далее алгоритм работает только если свет изначально выключен
if (CorridorMotionSensor.state == ON || Expire_timer_bedroom.state == ON){ //Проверка наличия движения в коридоре или включенного таймера
BedroomLights.sendCommand (ON) //Включение света
}
}
Expire_timer_bedroom.postUpdate(OFF) //Обновление таймера. Важно использовать postUpdate для предотвращения триггера на received command
Expire_timer_bedroom.sendCommand(ON) //Обновление таймера
}
end
//Правило для выключения света при истечении времени таймера
rule "bedroom_timer"
when
Item Expire_timer_bedroom received command OFF // Item получает команду OFF по истечении времени
then
if (BedroomAutolight.state==ON){ //Проверка включенного режима автоматики
if (BedroomMotionSensor.state == OFF && BedroomLights.state == ON) //Если на датчике в комнате нет сигнала и свет включен
BedroomLights.sendCommand (OFF) //Свет выключается
}
end