Расчёт времени восхода и заката солнца

В системах умного дома часто возникает потребность в информации о восходе и закате солнца. Эта информация может потребоваться во многих сценариях, например автоматического управления освещением, шторами, кормлении животных и т.д.

Рассчитать время восхода и заката солнца, а тек же продолжительность светлого и тёмного времени суток не так уж и сложно. В расчёте требуется лишь знать широту и долготу того места, относительно которого производиться расчёт. Эти данные легко найти на картах, например в google

1965765121.jpg

 Координаты у нас есть, заходим в админку Majordomo и создаём сценарий, называем его например SunRiseSetTime. Вписываем ниже приведённый код:

Показать

Скрыть

$sun_info = date_sun_info(time(), 49.955440, 82.609296); //географические координаты места

foreach ($sun_info as $key => $val) {
   switch ($key):
 
      case 'sunrise':
         $sunrise = $val;
         //echo 'Восход: '.date("H:i:s", $sunrise).'<br>';
         sg('ThisComputer.SunRiseTime',date("H:i", $sunrise));
      break;
 
      case 'sunset':
         $sunset = $val;
         $day_length = $sunset - $sunrise;
         //echo 'Заход: '.date("H:i:s", $sunset).'<br>';
         //echo 'Долгота дня: '.gmdate("H:i", $day_length).'<br>';
         sg('ThisComputer.SunSetTime',date("H:i", $sunset));
         sg('ThisComputer.LongTagTime',gmdate("H:i", $day_length));         
      break;
 
      case 'transit':
         echo 'В зените: '.date("H:i:s", $val).'<br>';
         sg('ThisComputer.TransitTime',date("H:i", $val));
      break;
 
      case 'civil_twilight_begin':
         //echo 'Начало утренних сумерек: '.date("H:i:s", $val).'<br>';
         sg('ThisComputer.civil_beginTime',date("H:i", $val)); 
      break;
 
      case 'civil_twilight_end': 
         //echo 'Конец вечерних сумерек: '.date("H:i:s", $val).'<br>';
         sg('ThisComputer.civil_endTime',date("H:i", $val));      
      break; 
        
      default:
        //ни чего!
   endswitch;
}

Не забываем в первой строчке вписать свои координаты!

Этот код после запуска в объекте "ThisComputer" создаёт новые свойства:

  1. SunRiseTime - Восход;
  2. SunSetTime - Заход;
  3. LongTagTime - Долгота дня;
  4. TransitTime - В зените.

Для того, что бы сценарий обновлял данные раз в сутки, ставим птичку "Выполнять периодически", в появившемся поле времени выставляем время запуска, например 00:30, проставляем дни запуска, и сохраняем.

4152054184.png

Результат расчётов можно посмотреть в свойствах объекта ThisComputer, либо раскоментировав строки в коде запустить его с установленной птичкой "выполнить после сохранения "

3390797848.png

Теперь в системе у нас есть время восхода и захода солнца. Опираясь на время захода солнца, в доме можно включать вечернюю подсветку, либо разрешать включение света при срабатывании датчиков движения. Применение этих данных зависит лишь от вашей фантазии.