Управление яркостью света в периоды времени в Domoticz (Blockly+Lua)

Вот такую схему я использую по сей день. Сразу добавлю – немного она странна, но работает. И так ,стоит задача: по датчику движения установленному на втором этаже коридора (между перекрестком всех комнат) в периоды с 15:30 до 22:59 свет включается с максимальной яркостью (или с определенной вами каа настроите), в периоды с 23:00 до 06:00 минимальной яркостью достаточной для поиска пути в Ванную 🙂 

Теперь более подробно.

1 – если в период времени с 15:30 до 23:00 обнаружено движения в коридоре 2го этажа и я нахожусь дома (подчеркиваю Я, а не кошки), то включается свет и переводим его яркость с уровнем 60, а датчик движения отключаем.По истечении 90 сек, свет отключится.

2 – если в период времени с 23:00 до 23:59 обнаружено движения в коридоре 2го этажа и я нахожусь дома (подчеркиваю Я, а не кошки), то включается свет и переводим его яркость с уровнем 10, а датчик движения отключаем.По истечении 10 сек, свет отключится.

3 – если в период времени с 00:00 до 23:59 обнаружено движения в коридоре 2го этажа и я нахожусь дома (подчеркиваю Я, а не кошки), то включается свет и переводим его яркость с уровнем 10, а датчик движения отключаем.По истечении 10 сек, свет отключится.

теперь почему здесь видим 2 периода с идентичными сценариями ? потому что указав тупо с 23:00 до 06:00 – не работало.

Что же будет происходить если меня нет дома (STATUSMYHOME=Off). В остальном случае сценарий не будет срабатывать ни на какие движения т.к. не у нас жестко прописана логика И – И – И. Как-то так.

Теперь рассмотрим, что такое Ночной режим в Коридоре 2 эт. Это отдельный виртуальный датчик типа Selector

 

 

 

 

Со следующими уровнями (Levels). Задавать из можно какие-угодно.

+ нам понадобится небольшой скрипт на Lua (Device) для управления этими Levels, где:

  • 192.168.1.43 это IP адрес нашей Xiaomi лампочки (не забываем, что необходимо на ней через приложение Yeelight Lamp включить режим разработчика.
  • DomDevice – это название нашего виртуального датчика ‘Ночной режим в Коридоре 2го эт’ (строго должно совпадать)
commandArray = {}
DomDevice = 'Ночной режим в Коридоре 2го эт';
IP = '192.168.1.43';
PORT = '55443'

if devicechanged[DomDevice]=='Off' then -- turn off
     runcommandoff = "sudo echo -ne '{\"id\":1,\"method\":\"set_power\", \"params\":[\"off\", \"smooth\", 500]}\\r\\n' | nc -w1 " ..IP.." " ..PORT.."";
     os.execute(runcommandoff);
   --  print(runcommandoff) 
     
     elseif devicechanged[DomDevice]=='Sunrise' then -- turn to sunrise mode from 0 to 100% on 15 minutes
     runcommandsunrise = " sudo echo -ne '{\"id\":1,\"method\":\"set_scene\", \"params\":[\"cf\",2,1,\"50,2,4000,1,900000,2,4000,100\"]}\\r\\n' | nc -w1 " ..IP.." " ..PORT.."";
     os.execute(runcommandsunrise);
   --  print(runcommandsunrise) 
     
     elseif devicechanged[DomDevice]=='Sunset' then -- turn to sunset mode from 100% to 0 on 15 minutes and turn off bulb
     runcommandsunset = " sudo echo -ne '{\"id\":1,\"method\":\"set_scene\", \"params\":[\"cf\",2,2,\"50,2,4000,75,900000,2,4000,1\"]}\\r\\n' | nc -w1 " ..IP.." " ..PORT.."";
     os.execute(runcommandsunset);
   --  print(runcommandsunset) 
   
    elseif devicechanged[DomDevice]=='Bright 25%' then -- turn to 25% bright
     runcommand25 = "sudo echo -ne '{\"id\":1,\"method\":\"set_scene\", \"params\":[\"bright\", 25, 500]}\\r\\n' | nc -w1 " ..IP.." " ..PORT.."";
     os.execute(runcommand25);
    -- print(runcommand25) 
     
     elseif devicechanged[DomDevice]=='Bright 50%' then -- turn to 50% bright
     runcommand50 = "sudo echo -ne '{\"id\":1,\"method\":\"set_scene\", \"params\":[\"bright\", 50, 500]}\\r\\n' | nc -w1 " ..IP.." " ..PORT.."";
     os.execute(runcommand50);
    -- print(runcommand50) 
     
    elseif devicechanged[DomDevice]=='Bright 75%' then -- turn to 75% bright
     runcommand75 = "sudo echo -ne '{\"id\":1,\"method\":\"set_scene\", \"params\":[\"bright\", 75, 500]}\\r\\n' | nc -w1 " ..IP.." " ..PORT.."";
     os.execute(runcommand75);
    -- print(runcommand75)
    
    elseif devicechanged[DomDevice]=='Bright 100%' then -- turn to 100% bright
     runcommand100 = "sudo echo -ne '{\"id\":1,\"method\":\"set_scene\", \"params\":[\"bright\", 100, 500]}\\r\\n' | nc -w1 " ..IP.." " ..PORT.."";
     os.execute(runcommand100);
    -- print(runcommand100)
    
    elseif devicechanged[DomDevice]=='Baby' then -- turn to Baby Mode
     runcommandbaby = "sudo echo -ne '{\"id\":1,\"method\":\"set_scene\", \"params\":[\"bright\", 10, 500]}\\r\\n' | nc -w1 " ..IP.." " ..PORT.."";
     os.execute(runcommandbaby);
    -- print(runcommandbaby) 
    
    elseif devicechanged[DomDevice]=='4-7-8' then -- turn to 4-7-8 mode
     runcommand478 = "sudo echo -ne '{\"id\":1,\"method\":\"set_scene\", \"params\":[\"cf_\",24,2,\"4000,2,4000,30,7000,2,4000,10,8000,2,4000,1\"]}\\r\\n' | nc -w1 " ..IP.." " ..PORT.."";
     os.execute(runcommand478);
    -- print(runcommand478) 
    
end
return commandArray

Полезные линки

Справочник по управлению умными лампочками (Lua/terminal)

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

2 комментариев
Популярные
Новые Старые
Межтекстовые Отзывы
Посмотреть все комментарии
Алексей
Алексей
22.09.2019 16:34

можно сделать гораздо проще и правильнее! создаешь виртуальный выключатель и на него вешаешь таймер… при этом в планировщике можешь указать на каждый день свой период! тем самым просто в написании кода используешь если выключатель (виртуальный с таймером) включен, то свет горит на полную, а если нет то тусклый

Электрон
Электрон
12.06.2021 17:09

теперь почему здесь видим 2 периода с идентичными сценариями ? потому что указав тупо с 23:00 до 06:00 – не работало.

если в выбранном временном диапазоне происходит смена суток (например с 22:00 до 6:00), то значение условия блока времени надо ставить “or”.
“and” условие работает только в течении суток (с 00:00 до 23:59)

2
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x