[Дизайн] Элемент сцены Погода

Оформление сцен, меню, страниц

Модераторы: immortal, newz20

Аватара пользователя
Amarok
Сообщения: 1415
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 455 раз
Поблагодарили: 125 раз
Контактная информация:

Re: Элемент сцены Погода

Сообщение Amarok » Вт мар 17, 2015 7:21 am

Smolalex писал(а):Отличный объект. Я бы добавил расчетный рассвет-закат,
У меня рассчитывает такой скрипт:
СпойлерПоказать

Код: Выделить всё

$lat=gg('ThisComputer.latitude');   // широта
$long=gg('ThisComputer.longitude'); // долгота
$utc=gg('ThisComputer.UTC');        // часовой пояс

class sun {
    var $latitude;     #szerokosc geograficzna
    var $longitude;    #dlugosc geograficzna
    var $timezone;     #strefa czasowa
        function sun ($latitude, $longitude, $timezone)
            {
                $this->latitude = $latitude;
                $this->longitude = $longitude;
                $this->timezone = $timezone;
                $this->yday = date("z");
                $this->mon = date("n");
                $this->mday = date("j");
                $this->year = date("Y");
                #---------------------
                $this->DST=$this->is_daylight_time(date("U"));
                    if ($this->DST)
                       {
                          $this->timezone = ($this->timezone + 1);
                       }
                    if ($this->timezone == "13")
                       {
                          $this->timezone = "-11";
                       }
                #---------------------
                $this->A = 1.5708;
                $this->B = 3.14159;
                $this->C = 4.71239;
                $this->D = 6.28319;
                $this->E = 0.0174533 * $this->latitude;
                $this->F = 0.0174533 * $this->longitude;
                $this->G = 0.261799  * $this->timezone;
                #---------------------
                  # For astronomical twilight, use
                  #$this->R = -.309017;
                  # For     nautical twilight, use
                  #$this->R = -.207912;
                  # For        civil twilight, use
                  #$this->R = -.104528;
                  # For     sunrise or sunset, use
                  $this->R = -.0145439;
                #---------------------
                
            }
        function is_daylight_time($time)
            {
               list($dom, $dow, $month, $hour, $min) = explode(":", date("d:w:m:H:i", $time));
               if   ($month > 4 && $month < 10)
                  {
                         $this->retval = 1;        # May thru September
                  }
               elseif ($month == 4 && $dom > 7)
                  {
                         $this->retval = 1;        # After first week in April
                  }
               elseif ($month == 4 && $dom <= 7 && $dow == 0 && $hour >= 2)
                  {
                         $this->retval = 1;        # After 2am on first Sunday ($dow=0) in April
                  }
               elseif ($month == 4 && $dom <= 7 && $dow != 0 && ($dom-$dow > 0))
                  {
                         $this->retval = 1;        # After Sunday of first week in April
                  }
               elseif ($month == 10 && $dom < 25)
                  {
                         $this->retval = 1;        # Before last week of October
                  }
               elseif ($month == 10 && $dom >= 25 && $dow == 0 && $hour < 2)
                  {
                         $this->retval = 1;        # Before 2am on last Sunday in October
                  }
               elseif ($month == 10 && $dom >= 25 && $dow != 0 && ($dom-24-$dow < 1) )
                  {
                         $this->retval = 1;        # Before Sunday of last week in October
                  }
               else
                  {
                         $this->retval = 0;
                  }

                  

                return $this->retval;
        }
    function sunrise()
        {
            $J =  $this->A;
            $K = $this->yday + (($J - $this->F) / $this->D);
            $L = ($K * .017202) - .0574039;              # Solar Mean Anomoly
            $M = $L + .0334405 * sin($L);                # Solar True Longitude
            $M += 4.93289 + (3.49066E-04) * sin(2 * $L);
                if ($this->D == 0)
                  {
                     echo "Trying to normalize with zero offset..."; exit;
                  }
                while ($M < 0)
                  {
                     $M = ($M + $this->D);
                  }
                while ($M >= $this->D)
                  {
                     $M = ($M - $this->D);
                  }
                if (($M / $this->A) - intval($M / $this->A) == 0)
                  {
                     $M += 4.84814E-06;
                  }
            $P = sin($M) / cos($M);                   # Solar Right Ascension
            $P = atan2(.91746 * $P, 1);
            # Quadrant Adjustment
                if ($M > $this->C)
                  {
                     $P += $this->D;
                  }
                else
                  {
                     if ($M > $this->A)
                        {
                           $P += $this->B;
                        }
                  }

            $Q = .39782 * sin($M);            # Solar Declination
            $Q = $Q / sqrt(-$Q * $Q + 1);     # This is how the original author wrote it!
            $Q = atan2($Q, 1);
            $S = $this->R - (sin($Q) * sin($this->E));
            $S = $S / (cos($Q) * cos($this->E));
                if (abs($S) > 1)
                    {
                        echo 'none';
                    }     # Null phenomenon
            $S = $S / sqrt(-$S * $S + 1);
            $S = $this->A - atan2($S, 1);
            $S = $this->D - $S ;
            $T = $S + $P - 0.0172028 * $K - 1.73364; # Local apparent time
            $U = $T - $this->F;                            # Universal timer
            $V = $U + $this->G;                            # Wall clock time
            # Quadrant Determination
                if ($this->D == 0)
                    {
                        echo "Trying to normalize with zero offset..."; exit;
                    }
                while ($V < 0)
                    {
                        $V = ($V + $this->D);
                    }
                while ($V >= $this->D)
                    {
                        $V = ($V - $this->D);
                    }
            $V = $V * 3.81972;
            $hour = intval($V);
            $min  = intval((($V - $hour) * 60) + 0.5);
            return date( "G:i ", mktime($hour,$min,0,$this->mon,$this->mday,$this->year) );
            //return mktime($hour,$min,0,$this->mon,$this->mday,$this->year) - 1800;
        }
    function sunset()
        {
            $J =  $this->C;
            $K = $this->yday + (($J - $this->F) / $this->D);
            $L = ($K * .017202) - .0574039;              # Solar Mean Anomoly
            $M = $L + .0334405 * sin($L);                # Solar True Longitude
            $M += 4.93289 + (3.49066E-04) * sin(2 * $L);
                if ($this->D == 0)
                  {
                     echo "Trying to normalize with zero offset..."; exit;
                  }
                while ($M < 0)
                  {
                     $M = ($M + $this->D);
                  }
                while ($M >= $this->D)
                  {
                     $M = ($M - $this->D);
                  }
                if (($M / $this->A) - intval($M / $this->A) == 0)
                  {
                     $M += 4.84814E-06;
                  }
            $P = sin($M) / cos($M);                   # Solar Right Ascension
            $P = atan2(.91746 * $P, 1);
            # Quadrant Adjustment
                if ($M > $this->C)
                  {
                     $P += $this->D;
                  }
                else
                  {
                     if ($M > $this->A)
                        {
                           $P += $this->B;
                        }
                  }

            $Q = .39782 * sin($M);            # Solar Declination
            $Q = $Q / sqrt(-$Q * $Q + 1);     # This is how the original author wrote it!
            $Q = atan2($Q, 1);
            $S = $this->R - (sin($Q) * sin($this->E));
            $S = $S / (cos($Q) * cos($this->E));
                if (abs($S) > 1)
                    {
                        echo 'none';
                    }     # Null phenomenon
            $S = $S / sqrt(-$S * $S + 1);
            $S = $this->A - atan2($S, 1);
            #$S = $this->D - $S ;
            $T = $S + $P - 0.0172028 * $K - 1.73364; # Local apparent time
            $U = $T - $this->F;                            # Universal timer
            $V = $U + $this->G;                            # Wall clock time
            # Quadrant Determination
                if ($this->D == 0)
                    {
                        echo "Trying to normalize with zero offset..."; exit;
                    }
                while ($V < 0)
                    {
                        $V = ($V + $this->D);
                    }
                while ($V >= $this->D)
                    {
                        $V = ($V - $this->D);
                    }
            $V = $V * 3.81972;
            $hour = intval($V);
            $min  = intval((($V - $hour) * 60) + 0.5);
            return date( "G:i ", mktime($hour,$min,0,$this->mon,$this->mday,$this->year) );
            //return mktime($hour,$min,0,$this->mon,$this->mday,$this->year) + 1800;
        }

}

//$ext_light = show_list($keys_id, "#key_pio#", "", 1, "key_label='ext_light'", 1);

$sun = new sun($lat, $long, $utc);
$my_sunrise = $sun->sunrise();
$my_sunset = $sun->sunset();

sg('ThisComputer.SunSet',$my_sunset); // время заката
sg('ThisComputer.SunRise',$my_sunrise ); //время восхода

$dest=gg('ThisComputer.SunRise');
$SunRise=strtotime($dest);
$SunRiseLightOff=$SunRise+60*60;
sg('ThisComputer.SunRiseLightOffTime',$SunRiseLightOff); //время восхода
say("Вычисляю восход и заход солнца", 0);
Smolalex писал(а):луну восход-закат <...> Есть еще расчет вероятности заморозков.
А это интересно. Можно php-код глянуть?
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Smolalex
Сообщения: 110
Зарегистрирован: Вт апр 29, 2014 9:16 pm
Благодарил (а): 7 раз
Поблагодарили: 13 раз

Re: Элемент сцены Погода

Сообщение Smolalex » Вт мар 17, 2015 8:54 am

Аватара пользователя
Amarok
Сообщения: 1415
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 455 раз
Поблагодарили: 125 раз
Контактная информация:

Re: Элемент сцены Погода

Сообщение Amarok » Вт мар 17, 2015 8:58 am

Хм... Любопытно... А как у Алисы выспросить температуру в 13ч и в 21ч?

P.S.: можно, конечно, в переменную заносить и потом читать в сценарии, но...
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Smolalex
Сообщения: 110
Зарегистрирован: Вт апр 29, 2014 9:16 pm
Благодарил (а): 7 раз
Поблагодарили: 13 раз

Re: Элемент сцены Погода

Сообщение Smolalex » Вт мар 17, 2015 9:01 am

У меня уличный датчик температуры. Пишу его значение в 13 и в 21 час.
Аватара пользователя
adzam
Сообщения: 583
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 16 раз
Поблагодарили: 131 раз

Re: Элемент сцены Погода

Сообщение adzam » Вт мар 17, 2015 12:16 pm

CSS3 АНИМАЦИЯ ЗВЕЗДНОГО НОЧНОГО НЕБА и снега

http://pcvector.net/tags/animation/
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Аватара пользователя
Bagir
Сообщения: 1486
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 338 раз

Re: Элемент сцены Погода

Сообщение Bagir » Вт мар 17, 2015 12:22 pm

лишь бы терминал по швам не затрещал от таких наворотов )) Я еще и трети задуманного не сделал, а уже замечаю легкое подтормаживание при открытии.
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Аватара пользователя
Amarok
Сообщения: 1415
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 455 раз
Поблагодарили: 125 раз
Контактная информация:

Re: Элемент сцены Погода

Сообщение Amarok » Вт мар 17, 2015 12:43 pm

adzam писал(а):CSS3 АНИМАЦИЯ ЗВЕЗДНОГО НОЧНОГО НЕБА и снега

http://pcvector.net/tags/animation/
Маньяки))))))))))))))))
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
adzam
Сообщения: 583
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 16 раз
Поблагодарили: 131 раз

Re: Элемент сцены Погода

Сообщение adzam » Вт мар 17, 2015 2:10 pm

:D :D :D :mrgreen:
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Аватара пользователя
adzam
Сообщения: 583
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 16 раз
Поблагодарили: 131 раз

Re: Элемент сцены Погода

Сообщение adzam » Ср мар 18, 2015 9:47 am

Я бы добавил в код скрипта переменную yesterday_temperature чтоб можно было сравнивать температуру со вчерашней , типа чтоб говорила что вчера было холодней или теплей чем сегодня на Х градусов.
При выводе кода со страницы http://export.yandex.ru/weather-ng/forecasts/ХХХХХ.xml?
Можно сделать долготу и широту переменными lat="57.526200" lon="38.306149" для того чтоб их не нужно было бы вставлять в код вычисления восхода , заката и т.д. у меня есть короткий скрипт для этого, вечером выложу.
И еще может скрипт getWeather заложить в какой нибудь метод обьекта Weather, чтоб его можно было бы импортировать с классом Weather а не дописывать отдельно.
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Аватара пользователя
Amarok
Сообщения: 1415
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 455 раз
Поблагодарили: 125 раз
Контактная информация:

Re: Элемент сцены Погода

Сообщение Amarok » Ср мар 18, 2015 10:08 am

adzam писал(а):Я бы добавил в код скрипта переменную yesterday_temperature чтоб можно было сравнивать температуру со вчерашней , типа чтоб говорила что вчера было холодней или теплей чем сегодня на Х градусов.
При выводе кода со страницы http://export.yandex.ru/weather-ng/forecasts/ХХХХХ.xml?
Можно сделать долготу и широту переменными lat="57.526200" lon="38.306149" для того чтоб их не нужно было бы вставлять в код вычисления восхода , заката и т.д. у меня есть короткий скрипт для этого, вечером выложу.
И еще может скрипт getWeather заложить в какой нибудь метод обьекта Weather, чтоб его можно было бы импортировать с классом Weather а не дописывать отдельно.
Всё очень любопытно.
А как привинтить " переменную yesterday_temperature чтоб можно было сравнивать температуру со вчерашней , типа чтоб говорила что вчера было холодней или теплей чем сегодня на Х градусов"?
Использую такой сценарий для получения погоды:
СпойлерПоказать

Код: Выделить всё

$objects=getObjectsByClass("Погода с Yandex"); //имя класса
foreach($objects as $obj) {
$city_id=gg($obj['TITLE'].".city_id"); //ID города узнаем тут: https://pogoda.yandex.ru/static/cities.xml
$data_file="http://export.yandex.ru/weather-ng/forecasts/$city_id.xml?".rand(); // адрес xml файла

$xml = simplexml_load_file($data_file); // раскладываем xml на массив

$temp=$xml->fact->temperature;
if (date('G')==13) {sg($obj['TITLE'].".Temp13h",$temp);}
if (date('G')==21) {sg($obj['TITLE'].".Temp21h",$temp);}
if ($temp>0) {$temp='+'.$temp;} // Если значение температуры положительно, для наглядности добавляем "+"
sg($obj['TITLE'].".Temp",$temp);
sg($obj['TITLE'].".Type",$xml->fact->weather_type);
sg($obj['TITLE'].".Pressure",$xml->fact->pressure);
sg($obj['TITLE'].".Humidity",$xml->fact->humidity);
sg($obj['TITLE'].".WindSpeed",$xml->fact->wind_speed);
sg($obj['TITLE'].".Image",$xml->fact->image);

$rain1=gg($obj['TITLE'].".Type");
$rain2=$xml->day[0]->day_part[0]->weather_type;
$rain3=$xml->day[0]->day_part[1]->weather_type;
$rain4=$xml->day[0]->day_part[2]->weather_type;
$rain5=$xml->day[0]->day_part[3]->weather_type;
$rain=($rain1. $rain2. $rain3. $rain4. $rain5);

$pos = strpos($rain, "дожд");
if ($pos === false) {
    sg($obj['TITLE'].".Rain",0);
    } else {
    sg($obj['TITLE'].".Rain",1);
//    say("Возможен дождь",2);
    }

$dir = $xml->fact->wind_direction;
switch ($dir){
   case 's':
     $dir="южный";
     break;
   case 'n':
     $dir="северный";
     break;
   case 'w':
     $dir="западный";
     break;
   case 'e':
     $dir="восточный";
     break;
   case 'sw':
     $dir="юго-западный";
     break;
   case 'nw':
     $dir="северо-западный";
     break;
   case 'se':
     $dir="юго-восточный";
     break;
   case 'ne':
     $dir="северо-восточный";
     break;
   case 'calm':
     $dir="штиль";
     break;
}

sg($obj['TITLE'].".WindDir",$dir);
sg($obj['TITLE'].".SunRise",$xml->day[0]->sunrise);
sg($obj['TITLE'].".SunSet",$xml->day[0]->sunset);

//    $metcast="";
    $metcast="На улице ".gg($obj['TITLE'].".Type").".";
    // ветер
    $WindSpeed=(float)gg($obj['TITLE'].".WindSpeed");
    if ($WindSpeed<1) { $metcast.=' Ветра, скорее всего, нет.';
    } elseif ($WindSpeed<3) { $metcast.=' Возможен слабый ветер.';
    } elseif ($WindSpeed<6) { $metcast.=' Возможен сильный ветер.';
    } elseif ($WindSpeed<9) { $metcast.=' Возможен довольно сильный ветер.';
    } else { $metcast.=' Возможен очень сильный ветер.';
    }
    
$w=round(strip_tags(gg($obj['TITLE'].".Temp")));
$tempw=$w;

if($w < "0"){ $tempw=abs($w); }
if($w > "0"){ $templus=" плюс "; }

if($tempw >= 11 and $tempw <= 14){ $tempcels=" градусов";}
else{
while ($tempw > 9){
$tempw=$tempw-10;
}

if($tempw == 0 or $tempw >= 5 and $tempw <= 9){ $tempcels=" градусов"; }
if($tempw == 1){ $tempcels=" градус"; } 
if($tempw >= 2 and $tempw <= 4){ $tempcels=" градуса"; }
}

    $metcast.=' Температура '.gg($obj['TITLE'].".Temp").' '.$tempcels.'.';
    $tm=(float)gg($obj['TITLE'].".Temp");
    if ($tm<-40)       { $metcast.=' Мы морозов не боимся!';
    } elseif ($tm<-30) { $metcast.=' Очень холодно, оденьтесь теплее.';
    } elseif ($tm<-20) { $metcast.=' Самое время есть мороженое.';
    } elseif ($tm<-10) { $metcast.=' Холодновато.';
    } elseif ($tm<-3)  { $metcast.=' Не особо холодно.';
    } elseif ($tm<3)   { $metcast.=' Значит, возможно, гололёд.';
    } elseif ($tm<10)  { $metcast.=' Тепловато.';
    } elseif ($tm<25)  { $metcast.=' Тепло.';
    } elseif ($tm<30)  { $metcast.=' Жарко.';
    } elseif ($tm>30)  { $metcast.=' Ташкент.';
    } 
    
//    $metcast.=' Восход солнца сегодня в '.gg($obj['TITLE'].".SunRise").',';
//    $metcast.=' закат в '.gg($obj['TITLE'].".SunSet").'.';
sg($obj['TITLE'].".metcast",$metcast);
//
 $w3days="Сегодня ночью будет ";
   $temp=$xml->day[0]->day_part[3]->temperature_from;
   if ($temp>0) {$temp='+'.$temp;}
 $w3days.=$temp;
 $w3days.="°, ";
 $w3days.=$xml->day[0]->day_part[3]->weather_type;
 $w3days.=".\r\nЗавтра днём будет ";
   $temp=$xml->day[1]->day_part[1]->temperature_from;
   if ($temp>0) {$temp='+'.$temp;}
 $w3days.=$temp;
 $w3days.="°, "; 
 $w3days.=$xml->day[1]->day_part[1]->weather_type;
 $w3days.=". Послезавтра ночью ";
   $temp=$xml->day[1]->day_part[3]->temperature_from;
   if ($temp>0) {$temp='+'.$temp;}
 $w3days.=$temp;
 $w3days.="°, ";
 $w3days.=$xml->day[1]->day_part[3]->weather_type;
 $w3days.=".";
sg($obj['TITLE'].".forecast",$w3days);
sg($obj['TITLE'].".updated" , date("H:i",time()));}
say("Читаю прогноз погоды с Yandex", 0); 
И такой для вычисления восхода\захода солнца:
СпойлерПоказать

Код: Выделить всё

$lat=gg('ThisComputer.latitude');   // широта
$long=gg('ThisComputer.longitude'); // долгота
$utc=gg('ThisComputer.UTC');        // часовой пояс

class sun {
    var $latitude;     #szerokosc geograficzna
    var $longitude;    #dlugosc geograficzna
    var $timezone;     #strefa czasowa
        function sun ($latitude, $longitude, $timezone)
            {
                $this->latitude = $latitude;
                $this->longitude = $longitude;
                $this->timezone = $timezone;
                $this->yday = date("z");
                $this->mon = date("n");
                $this->mday = date("j");
                $this->year = date("Y");
                #---------------------
                $this->DST=$this->is_daylight_time(date("U"));
                    if ($this->DST)
                       {
                          $this->timezone = ($this->timezone + 1);
                       }
                    if ($this->timezone == "13")
                       {
                          $this->timezone = "-11";
                       }
                #---------------------
                $this->A = 1.5708;
                $this->B = 3.14159;
                $this->C = 4.71239;
                $this->D = 6.28319;
                $this->E = 0.0174533 * $this->latitude;
                $this->F = 0.0174533 * $this->longitude;
                $this->G = 0.261799  * $this->timezone;
                #---------------------
                  # For astronomical twilight, use
                  #$this->R = -.309017;
                  # For     nautical twilight, use
                  #$this->R = -.207912;
                  # For        civil twilight, use
                  #$this->R = -.104528;
                  # For     sunrise or sunset, use
                  $this->R = -.0145439;
                #---------------------
                
            }
        function is_daylight_time($time)
            {
               list($dom, $dow, $month, $hour, $min) = explode(":", date("d:w:m:H:i", $time));
               if   ($month > 4 && $month < 10)
                  {
                         $this->retval = 1;        # May thru September
                  }
               elseif ($month == 4 && $dom > 7)
                  {
                         $this->retval = 1;        # After first week in April
                  }
               elseif ($month == 4 && $dom <= 7 && $dow == 0 && $hour >= 2)
                  {
                         $this->retval = 1;        # After 2am on first Sunday ($dow=0) in April
                  }
               elseif ($month == 4 && $dom <= 7 && $dow != 0 && ($dom-$dow > 0))
                  {
                         $this->retval = 1;        # After Sunday of first week in April
                  }
               elseif ($month == 10 && $dom < 25)
                  {
                         $this->retval = 1;        # Before last week of October
                  }
               elseif ($month == 10 && $dom >= 25 && $dow == 0 && $hour < 2)
                  {
                         $this->retval = 1;        # Before 2am on last Sunday in October
                  }
               elseif ($month == 10 && $dom >= 25 && $dow != 0 && ($dom-24-$dow < 1) )
                  {
                         $this->retval = 1;        # Before Sunday of last week in October
                  }
               else
                  {
                         $this->retval = 0;
                  }

                  

                return $this->retval;
        }
    function sunrise()
        {
            $J =  $this->A;
            $K = $this->yday + (($J - $this->F) / $this->D);
            $L = ($K * .017202) - .0574039;              # Solar Mean Anomoly
            $M = $L + .0334405 * sin($L);                # Solar True Longitude
            $M += 4.93289 + (3.49066E-04) * sin(2 * $L);
                if ($this->D == 0)
                  {
                     echo "Trying to normalize with zero offset..."; exit;
                  }
                while ($M < 0)
                  {
                     $M = ($M + $this->D);
                  }
                while ($M >= $this->D)
                  {
                     $M = ($M - $this->D);
                  }
                if (($M / $this->A) - intval($M / $this->A) == 0)
                  {
                     $M += 4.84814E-06;
                  }
            $P = sin($M) / cos($M);                   # Solar Right Ascension
            $P = atan2(.91746 * $P, 1);
            # Quadrant Adjustment
                if ($M > $this->C)
                  {
                     $P += $this->D;
                  }
                else
                  {
                     if ($M > $this->A)
                        {
                           $P += $this->B;
                        }
                  }

            $Q = .39782 * sin($M);            # Solar Declination
            $Q = $Q / sqrt(-$Q * $Q + 1);     # This is how the original author wrote it!
            $Q = atan2($Q, 1);
            $S = $this->R - (sin($Q) * sin($this->E));
            $S = $S / (cos($Q) * cos($this->E));
                if (abs($S) > 1)
                    {
                        echo 'none';
                    }     # Null phenomenon
            $S = $S / sqrt(-$S * $S + 1);
            $S = $this->A - atan2($S, 1);
            $S = $this->D - $S ;
            $T = $S + $P - 0.0172028 * $K - 1.73364; # Local apparent time
            $U = $T - $this->F;                            # Universal timer
            $V = $U + $this->G;                            # Wall clock time
            # Quadrant Determination
                if ($this->D == 0)
                    {
                        echo "Trying to normalize with zero offset..."; exit;
                    }
                while ($V < 0)
                    {
                        $V = ($V + $this->D);
                    }
                while ($V >= $this->D)
                    {
                        $V = ($V - $this->D);
                    }
            $V = $V * 3.81972;
            $hour = intval($V);
            $min  = intval((($V - $hour) * 60) + 0.5);
            return date( "G:i ", mktime($hour,$min,0,$this->mon,$this->mday,$this->year) );
            //return mktime($hour,$min,0,$this->mon,$this->mday,$this->year) - 1800;
        }
    function sunset()
        {
            $J =  $this->C;
            $K = $this->yday + (($J - $this->F) / $this->D);
            $L = ($K * .017202) - .0574039;              # Solar Mean Anomoly
            $M = $L + .0334405 * sin($L);                # Solar True Longitude
            $M += 4.93289 + (3.49066E-04) * sin(2 * $L);
                if ($this->D == 0)
                  {
                     echo "Trying to normalize with zero offset..."; exit;
                  }
                while ($M < 0)
                  {
                     $M = ($M + $this->D);
                  }
                while ($M >= $this->D)
                  {
                     $M = ($M - $this->D);
                  }
                if (($M / $this->A) - intval($M / $this->A) == 0)
                  {
                     $M += 4.84814E-06;
                  }
            $P = sin($M) / cos($M);                   # Solar Right Ascension
            $P = atan2(.91746 * $P, 1);
            # Quadrant Adjustment
                if ($M > $this->C)
                  {
                     $P += $this->D;
                  }
                else
                  {
                     if ($M > $this->A)
                        {
                           $P += $this->B;
                        }
                  }

            $Q = .39782 * sin($M);            # Solar Declination
            $Q = $Q / sqrt(-$Q * $Q + 1);     # This is how the original author wrote it!
            $Q = atan2($Q, 1);
            $S = $this->R - (sin($Q) * sin($this->E));
            $S = $S / (cos($Q) * cos($this->E));
                if (abs($S) > 1)
                    {
                        echo 'none';
                    }     # Null phenomenon
            $S = $S / sqrt(-$S * $S + 1);
            $S = $this->A - atan2($S, 1);
            #$S = $this->D - $S ;
            $T = $S + $P - 0.0172028 * $K - 1.73364; # Local apparent time
            $U = $T - $this->F;                            # Universal timer
            $V = $U + $this->G;                            # Wall clock time
            # Quadrant Determination
                if ($this->D == 0)
                    {
                        echo "Trying to normalize with zero offset..."; exit;
                    }
                while ($V < 0)
                    {
                        $V = ($V + $this->D);
                    }
                while ($V >= $this->D)
                    {
                        $V = ($V - $this->D);
                    }
            $V = $V * 3.81972;
            $hour = intval($V);
            $min  = intval((($V - $hour) * 60) + 0.5);
            return date( "G:i ", mktime($hour,$min,0,$this->mon,$this->mday,$this->year) );
            //return mktime($hour,$min,0,$this->mon,$this->mday,$this->year) + 1800;
        }

}

//$ext_light = show_list($keys_id, "#key_pio#", "", 1, "key_label='ext_light'", 1);

$sun = new sun($lat, $long, $utc);
$my_sunrise = $sun->sunrise();
$my_sunset = $sun->sunset();

sg('ThisComputer.SunSet',$my_sunset); // время заката
sg('ThisComputer.SunRise',$my_sunrise ); //время восхода

$dest=getGlobal('ThisComputer.SunRise');
$SunRise=strtotime($dest);
$SunRiseLightOff=$SunRise+60*60;
sg('ThisComputer.SunRiseLightOffTime',$SunRiseLightOff); //время восхода
say("Вычисляю восход и заход солнца", 0);
 
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Ответить