После того, как мне надоело всякий раз с телефона включать и выключать ночную RGB подсветку под кроватью ребенка, я решил всё это дело автоматизировать по датчику движения, благо, как раз недавно приобрел парочку сяомишных.
Затевалось всё это дело для того, что бы дочка, проснувшись ночью, могла в темноте найти горшок)). Сама RGB подсветка смонтирована под кроватью и настроена довольно тускло. Включается и выключается подсветка соответствующими сценариями (см. предыдущую статью)
Датчик движения (Xiaomi RTCGQ01LM) подключен через стик CC2530 и модуль Zigbee2mqtt. При включенном автобиндинге подключаются датчики на удивление просто, достаточно зажать скрепкой на несколько секунд скрытую на корпусе кнопку (пока на нем не замигает синий светодиод).
Логика работы ночной подсветки построена на датчике движения, двух выключателях, разрешающих или запрещающих автоматическое включение и выключение, а так же, на задаваемом для работы этой автоматизации, периоде времени.
В первую очередь, нужно добавить необходимые свойства выбранному помещению. Для этого находим в объектах класс ROOMS:
Заходим внутрь... свойства... и добавляем необходимые (backlight_OffTime; backlight_OnTime; backlight_SwMotionOff; backlight_SwMotionOn)...
Сразу создаем меню управления:
И связываем с необходимыми свойствами объекта Kinderroom:
Теперь нужно создать Простое Устройство (ПУ) для этого заходим в свойства нашего датчика и находим метрику "binary_sensor : occupancy":
Заходим внутрь и нажимаем Добавить.
И создаем простое устройство типа датчик движения.
Одновременно с ПУ создастся соответствующий объект, в котором уже будут присутствовать ранее созданные методы класса.
Осталось написать алгоритм работы подсветки в методе Motion Detect датчика движения:
//если в свойствах объекта детской комнаты текущее время попадает в указанный диапазон и установлено разрешение на автовключение при движении (статус 1) , то включим подсветку в детской:
if ((timeBetween((gg('Kinderroom.backlight_OnTime')),(gg('Kinderroom.backlight_OffTime')))) && ((gg('Kinderroom.backlight_SwMotionOn ')==1))) {
runScript('ESPHome_MQTT_RGB_On_Green');
}
//если в свойствах объекта детской комнаты установлено разрешение на автовыключение (статус 1), то запустим таймер (70 сек), по истечении которого подсветка будет выключена
if ((gg('Kinderroom.backlight_SwMotionOff ')==1)) {
clearTimeOut("mqttRgb02.offtimer");
SetTimeOut(mqttRgb02.offtimer,"runScript('ESPHome_MQTT_RGB_OFF');",70);
}
Как-то так:
Подсветка у меня ночная, поэтому она включается только на 70 сек, если движение продолжается, то подсветка не гаснет (таймер сбрасывается). Данный датчик движения срабатывает не чаще 1 раза в 60 секунд, отсюда и выбор длительности таймера в 70 секунд, если сделать меньше, то подсветка будет постоянно гаснуть и включаться снова.