calcul position du soleil

Discussion et échanges de scripts pour la box eedomus

Re: calcul position du soleil

Messagepar vva » 25 Mai 2015 21:31

Et bien je ne suis pas astronome expert et j'ai juste rendu exploitable et compatible avec nos box préférées, un calculateur existant (excel).

On identifie un objet (soleil) dans l'espace (2 plans) grâce à 2 points. Ici l'azimut (plan horizontal) et l'élévation (plan vertical).
Quand le soleil se couche, il descend en dessous de l'horizon (élévation négative)
Quand il arrive le plus en dessous de nous (la terre), il se trouve au nord avec une élévation min.
Quand il arrive le plus au dessus de nous, il se trouve en direction du sud avec une élévation max.

Je viens de tester avec Google sky map et effectivement, il est 22h30 et le soleil se dirige vers le nord (plan horizontal) avec une élévation < à 0° (plan vertical).
Pour illustrer : http://planet-terre.ens-lyon.fr/planetterre/objets/Images/determination-latitude-Soleil-etoiles/trajectoire-Soleil-voute-celeste.png

Voilà ce que je comprends de la situation qui me semble cohérente avec mes besoins.

Je vous fais signe pour la v0.15

Bonne nuit à tous
vva
 
Messages : 381
Inscription : 12 Juin 2013

Re: calcul position du soleil

Messagepar vva » 27 Mai 2015 11:48

Voici le résultat obtenu avec la correction apportée au script concernant l'azimut.
Il y avait bien une erreur dans la formule de calcul: un cosinus à la place d'un sinus :oops:
Pièces jointes
correction.png
correction
correction.png (59.91 Kio) Consulté 23167 fois
vva
 
Messages : 381
Inscription : 12 Juin 2013


Re: calcul position du soleil

Messagepar vva » 27 Mai 2015 13:48

patience, patience ! J'optimise un peu le code ... :D
vva
 
Messages : 381
Inscription : 12 Juin 2013

Re: calcul position du soleil

Messagepar vva » 28 Mai 2015 14:20

Voila pour les impatients la v0.15 :P

J'ai testé cette version 4 jours avec succès.
Elle corrige :
- L'erreur de calcul de l'azimut (voir posts précédents).
Elle améliore :
- L'association des points cardinaux.

Code : Tout sélectionner
<?php

// Version v0.15
// CE SCRIPT EXPERIMENTAL REALISE EN PHP PERMET DE DETERMINER LA POSITION DU SOLEIL (AZIMUT + ELEVATION, ...)
// L'ALGORYTHME EST BASÉ SUR UNE ÉTUDE FAITE PAR LE National Oceanic and Atmospheric Administration

// LES VARIABLES DE LA BOX EEDOMUS:
// [VAR1] = @IP DE LA BOX
// [VAR2] = Latitude (+ => N)
// [VAR3] = Longitude (+ => E)

// Les latitude et longitude doivent contenir des "." (PAS DE VIRGULE)
// EXEMPLE: Latitude = 48.858346
//          Longitude = 2.294496
// OU
//
// EXEMPLE: Latitude = 48.387942
//          Longitude = -4.484993

// EXEMPLE APPEL DE SCRIPT avec variables: http://[VAR1]/script/?exec=position_soleil.php&latitude=[VAR2]&longitude=[VAR3]
// EXEMPLE APPEL DE SCRIPT dans navigateur: http://@IP_BOX_EEDOMUS/script/?exec=position_soleil.php&latitude=48.858346&longitude=2.294496

// LE RESULTAT EST SOUS FORME XML
// L'ELEVATION CORRESPOND A L'ANGLE ENTRE L'HORIZON ET LE SOLEIL
// XPATH ELEVATION: /Data/Soleil/Solar_Elevation_corrected_for_atm_refraction_deg

// L'AZIMUT CORRESPOND A L'ANGLE ENTRE LE NORD ET LE SOLEIL
// XPATH AZIMUT: /Data/Soleil/Solar_Azimuth_round
// 0°/ 360° = NORD
// 90° = EST
// 180° = SUD
// 270° = OUEST

//--------------------------------------------------------------

// Stocker les variables passées en argument
$ma_latitude = getArg('latitude');
$ma_longitude = getArg('longitude');

// Recalcul avec correction depuis le jour d'origine
$diff_jour_origine = strtotime('2015-03-26 00:00:00');
$diff_jour = strtotime(date('Y')."-".date('m')."-".date('d')." 00:00:00");

$jour_diff = $diff_jour - $diff_jour_origine;
$jour_diff = round($jour_diff / 84600);

// Aujourd'hui depuis 01/01/1900
$delta_jour = 42088;

$Date_1900 = $jour_diff + $delta_jour;

// Time zone par défaut = Heure d'hiver
$time_zone = 1;
$day_year = date('z');

// SI JOUR > A 87 ET < A 297 = HEURE D'ETE: TIME_ZONE = 2 SINON : TIME_ZONE = 1
if ($day_year >= 87 && $day_year <= 297)
{
   // Heure d'été
   $time_zone = 2;
}

//--------------------------------------------------------------

$heure_secondes= date('H') * 3600;
$heure_inter = date('i') * 60;
$heure_secondes= $heure_secondes+ $heure_inter;
$heure_secondes= $heure_secondes+ date('s');
$Time_past_local_midnight = $heure_secondes/ 86400;
$Time_past_local_midnight = $Time_past_local_midnight;

$Julian_Day = $Date_1900 + '2415018.5' + $Time_past_local_midnight;

$Julian_Day_2 = $time_zone / 24;
$Julian_Day = $Julian_Day - $Julian_Day_2;

$Julian_Century = $Julian_Day - 2451545;
$Julian_Century = $Julian_Century / 36525;

$Geom_Mean_Long_Sun_deg_1 = $Julian_Century * '0.0003032';
$Geom_Mean_Long_Sun_deg_1 = '36000.76983' + $Geom_Mean_Long_Sun_deg_1;
$Geom_Mean_Long_Sun_deg_1 = $Julian_Century * $Geom_Mean_Long_Sun_deg_1;
$Geom_Mean_Long_Sun_deg = fmod('280.46646' + $Geom_Mean_Long_Sun_deg_1,360);

$Geom_Mean_Anom_Sun_deg = '0.0001537' * $Julian_Century;
$Geom_Mean_Anom_Sun_deg = '35999.05029' - $Geom_Mean_Anom_Sun_deg;
$Geom_Mean_Anom_Sun_deg = $Julian_Century * $Geom_Mean_Anom_Sun_deg;
$Geom_Mean_Anom_Sun_deg = '357.52911' + $Geom_Mean_Anom_Sun_deg;

$Eccent_Earth_Orbit = '0.0000001267'*$Julian_Century;
$Eccent_Earth_Orbit = '0.000042037' + $Eccent_Earth_Orbit;
$Eccent_Earth_Orbit = $Julian_Century * $Eccent_Earth_Orbit;
$Eccent_Earth_Orbit = '0.016708634' - $Eccent_Earth_Orbit;

$Sun_Eq_of_Ctr_1 = deg2rad(3 * $Geom_Mean_Anom_Sun_deg);
$Sun_Eq_of_Ctr_1 = sin($Sun_Eq_of_Ctr_1);
$Sun_Eq_of_Ctr_1 = $Sun_Eq_of_Ctr_1 * '0.000289';
$Sun_Eq_of_Ctr_2 = '0.000101' * $Julian_Century;
$Sun_Eq_of_Ctr_2 = '0.019993' - $Sun_Eq_of_Ctr_2;
$Sun_Eq_of_Ctr_3 = deg2rad(2* $Geom_Mean_Anom_Sun_deg);
$Sun_Eq_of_Ctr_3 = sin($Sun_Eq_of_Ctr_3);
$Sun_Eq_of_Ctr = $Sun_Eq_of_Ctr_2 * $Sun_Eq_of_Ctr_3;
$Sun_Eq_of_Ctr = $Sun_Eq_of_Ctr + $Sun_Eq_of_Ctr_1;
$Sun_Eq_of_Ctr_3 = '0.000014' * $Julian_Century;
$Sun_Eq_of_Ctr_3 = $Sun_Eq_of_Ctr_3 + '0.004817';
$Sun_Eq_of_Ctr_3 = $Julian_Century * $Sun_Eq_of_Ctr_3;
$Sun_Eq_of_Ctr_3 = '1.914602' - $Sun_Eq_of_Ctr_3;
$Sun_Eq_of_Ctr_2 = deg2rad( $Geom_Mean_Anom_Sun_deg);
$Sun_Eq_of_Ctr_2 = sin($Sun_Eq_of_Ctr_2);
$Sun_Eq_of_Ctr_2 = $Sun_Eq_of_Ctr_2*$Sun_Eq_of_Ctr_3;
$Sun_Eq_of_Ctr = $Sun_Eq_of_Ctr_2 + $Sun_Eq_of_Ctr;

$Sun_True_Long_deg = $Geom_Mean_Long_Sun_deg + $Sun_Eq_of_Ctr;

$Sun_True_Anom_deg = $Geom_Mean_Anom_Sun_deg + $Sun_Eq_of_Ctr;

$Sun_Rad_Vector_AUs_1 = deg2rad($Sun_True_Anom_deg);
$Sun_Rad_Vector_AUs_1 = cos($Sun_Rad_Vector_AUs_1);
$Sun_Rad_Vector_AUs_1 = $Eccent_Earth_Orbit * $Sun_Rad_Vector_AUs_1;
$Sun_Rad_Vector_AUs = 1 + $Sun_Rad_Vector_AUs_1;
$Sun_Rad_Vector_AUs_1  = $Eccent_Earth_Orbit*$Eccent_Earth_Orbit;
$Sun_Rad_Vector_AUs_1 = 1-$Sun_Rad_Vector_AUs_1;
$Sun_Rad_Vector_AUs_1 = '1.000001018'*$Sun_Rad_Vector_AUs_1;
$Sun_Rad_Vector_AUs = $Sun_Rad_Vector_AUs_1 / $Sun_Rad_Vector_AUs;

$Sun_App_Long_deg_1 = '1934.136'*$Julian_Century;
$Sun_App_Long_deg_1 = '125.04'-$Sun_App_Long_deg_1;
$Sun_App_Long_deg_1 = deg2rad($Sun_App_Long_deg_1);
$Sun_App_Long_deg_1 = sin($Sun_App_Long_deg_1);
$Sun_App_Long_deg_1 = '0.00478'*$Sun_App_Long_deg_1;
$Sun_App_Long_deg = $Sun_True_Long_deg - '0.00569'-$Sun_App_Long_deg_1;

$Mean_Obliq_Ecliptic_deg = $Julian_Century * '0.001813';
$Mean_Obliq_Ecliptic_deg = '0.00059'- $Mean_Obliq_Ecliptic_deg;
$Mean_Obliq_Ecliptic_deg = $Julian_Century * $Mean_Obliq_Ecliptic_deg;
$Mean_Obliq_Ecliptic_deg = '46.815' + $Mean_Obliq_Ecliptic_deg;
$Mean_Obliq_Ecliptic_deg = $Julian_Century * $Mean_Obliq_Ecliptic_deg;
$Mean_Obliq_Ecliptic_deg = '21.448' - $Mean_Obliq_Ecliptic_deg;
$Mean_Obliq_Ecliptic_deg = $Mean_Obliq_Ecliptic_deg / 60;
$Mean_Obliq_Ecliptic_deg = '26' + $Mean_Obliq_Ecliptic_deg;
$Mean_Obliq_Ecliptic_deg = $Mean_Obliq_Ecliptic_deg / 60;
$Mean_Obliq_Ecliptic_deg = 23 + $Mean_Obliq_Ecliptic_deg;

$Obliq_Corr_deg = '1934.136'*$Julian_Century;
$Obliq_Corr_deg = '125.04'-$Obliq_Corr_deg;
$Obliq_Corr_deg = deg2rad($Obliq_Corr_deg);
$Obliq_Corr_deg = cos($Obliq_Corr_deg);
$Obliq_Corr_deg = $Obliq_Corr_deg*'0.00256';
$Obliq_Corr_deg = $Mean_Obliq_Ecliptic_deg + $Obliq_Corr_deg;

$Sun_Declin_deg_1 = deg2rad($Sun_App_Long_deg);
$Sun_Declin_deg_1 = sin($Sun_Declin_deg_1);
$Sun_Declin_deg_2 = deg2rad($Obliq_Corr_deg);
$Sun_Declin_deg_2 = sin($Sun_Declin_deg_2);
$Sun_Declin_deg = asin($Sun_Declin_deg_1*$Sun_Declin_deg_2);
$Sun_Declin_deg = rad2deg($Sun_Declin_deg);

$SunRt_Ascen_deg_1 = deg2rad($Sun_App_Long_deg);
$SunRt_Ascen_deg_1 = sin($SunRt_Ascen_deg_1);
$SunRt_Ascen_deg_2 = deg2rad($Obliq_Corr_deg);
$SunRt_Ascen_deg_2 = cos($SunRt_Ascen_deg_2);
$SunRt_Ascen_deg_1 = $SunRt_Ascen_deg_2 * $SunRt_Ascen_deg_1;
$SunRt_Ascen_deg_2 = deg2rad($Sun_App_Long_deg);
$SunRt_Ascen_deg_2 = cos($SunRt_Ascen_deg_2);
$SunRt_Ascen_deg = atan2($SunRt_Ascen_deg_1, $SunRt_Ascen_deg_2);
$SunRt_Ascen_deg = rad2deg($SunRt_Ascen_deg);

$y_1 = $Obliq_Corr_deg/2;
$y_1 = deg2rad($y_1);
$y_1 = tan($y_1);
$y = $Obliq_Corr_deg/2;
$y = deg2rad($y);
$y = tan($y);
$y = $y * $y_1;

$Eq_of_Time_minutes_1 = deg2rad($Geom_Mean_Anom_Sun_deg);
$Eq_of_Time_minutes_1 = 2 * $Eq_of_Time_minutes_1;
$Eq_of_Time_minutes_1 = sin($Eq_of_Time_minutes_1);
$Eq_of_Time_minutes_1 = '1.25' * $Eccent_Earth_Orbit * $Eccent_Earth_Orbit * $Eq_of_Time_minutes_1;
$Eq_of_Time_minutes_2 = deg2rad($Geom_Mean_Long_Sun_deg);
$Eq_of_Time_minutes_2 = 4 * $Eq_of_Time_minutes_2;
$Eq_of_Time_minutes_2 = sin($Eq_of_Time_minutes_2);
$Eq_of_Time_minutes_2 = '0.5' * $y * $y * $Eq_of_Time_minutes_2;
$Eq_of_Time_minutes_3 = deg2rad($Geom_Mean_Long_Sun_deg);
$Eq_of_Time_minutes_3 = 2 * $Eq_of_Time_minutes_3;
$Eq_of_Time_minutes_3 = cos($Eq_of_Time_minutes_3);
$Eq_of_Time_minutes_4 = deg2rad($Geom_Mean_Anom_Sun_deg);
$Eq_of_Time_minutes_4 = sin($Eq_of_Time_minutes_4);
$Eq_of_Time_minutes_4 = 4 * $Eccent_Earth_Orbit * $y * $Eq_of_Time_minutes_4 * $Eq_of_Time_minutes_3;
$Eq_of_Time_minutes_5 = deg2rad($Geom_Mean_Anom_Sun_deg);
$Eq_of_Time_minutes_5 = sin($Eq_of_Time_minutes_5);
$Eq_of_Time_minutes_5 = 2 * $Eccent_Earth_Orbit * $Eq_of_Time_minutes_5;
$Eq_of_Time_minutes_6 = deg2rad($Geom_Mean_Long_Sun_deg);
$Eq_of_Time_minutes_6 = 2 * $Eq_of_Time_minutes_6;
$Eq_of_Time_minutes_6 = sin($Eq_of_Time_minutes_6);
$Eq_of_Time_minutes_6 = $y * $Eq_of_Time_minutes_6;

$Eq_of_Time_minutes = $Eq_of_Time_minutes_6 - $Eq_of_Time_minutes_5 + $Eq_of_Time_minutes_4 - $Eq_of_Time_minutes_2 - $Eq_of_Time_minutes_1;
$Eq_of_Time_minutes = 4 * rad2deg($Eq_of_Time_minutes);

$HA_Sunrise_deg_1 = deg2rad($Sun_Declin_deg);
$HA_Sunrise_deg_1 = tan($HA_Sunrise_deg_1);
$HA_Sunrise_deg_2 = deg2rad($ma_latitude);
$HA_Sunrise_deg_2 = tan($HA_Sunrise_deg_2);
$HA_Sunrise_deg_1 = $HA_Sunrise_deg_1 * $HA_Sunrise_deg_2;
$HA_Sunrise_deg_2 = deg2rad($Sun_Declin_deg);
$HA_Sunrise_deg_5 = cos($HA_Sunrise_deg_2);
$HA_Sunrise_deg_3 = deg2rad($ma_latitude);
$HA_Sunrise_deg_3 = cos($HA_Sunrise_deg_3);
$HA_Sunrise_deg_3 = $HA_Sunrise_deg_3 * $HA_Sunrise_deg_5;
$HA_Sunrise_deg_4 = deg2rad('90.833');
$HA_Sunrise_deg_4 = cos($HA_Sunrise_deg_4);
$HA_Sunrise_deg = $HA_Sunrise_deg_4 / $HA_Sunrise_deg_3;
$HA_Sunrise_deg = $HA_Sunrise_deg - $HA_Sunrise_deg_1;
$HA_Sunrise_deg = acos($HA_Sunrise_deg);
$HA_Sunrise_deg = rad2deg($HA_Sunrise_deg);

$Solar_Noon_LST = $time_zone * 60;
$Solar_Noon_LST_1 = 4 * $ma_longitude;
$Solar_Noon_LST = 720 - $Solar_Noon_LST_1 - $Eq_of_Time_minutes + $Solar_Noon_LST;
$Solar_Noon_LST = $Solar_Noon_LST / 1440;

$Sunrise_Time_LST = $HA_Sunrise_deg*4;
$Sunrise_Time_LST = $Sunrise_Time_LST / 1440;
$Sunrise_Time_LST = $Solar_Noon_LST - $Sunrise_Time_LST;

$Sunset_Time_LST = $HA_Sunrise_deg*4;
$Sunset_Time_LST = $Sunset_Time_LST / 1440;
$Sunset_Time_LST = $Solar_Noon_LST + $Sunset_Time_LST;

$Sunlight_Duration_minutes = 8* $HA_Sunrise_deg;

 
$True_Solar_Time_min_1 = 60 * $time_zone;
$True_Solar_Time_min_2 = 4 * $ma_longitude;
$True_Solar_Time_min_3 = $Time_past_local_midnight * 1440;
$True_Solar_Time_min = $True_Solar_Time_min_3 + $Eq_of_Time_minutes + $True_Solar_Time_min_2 - $True_Solar_Time_min_1;
$True_Solar_Time_min = fmod($True_Solar_Time_min, 1440);

$True_Solar_Time_min_format_H = round($True_Solar_Time_min);
$True_Solar_Time_min_format_H = $True_Solar_Time_min_format_H / 60;
$Position_Point = strpos($True_Solar_Time_min_format_H,'.');

if($Position_Point > 0)
{
   $True_Solar_Time_min_format_HH = substr($True_Solar_Time_min_format_H,0,$Position_Point);
   $True_Solar_Time_min_format_HM = substr($True_Solar_Time_min_format_H,$Position_Point+1,2);
   $True_Solar_Time_min_format_HM = round($True_Solar_Time_min_format_HM *60/100);
   
   if($True_Solar_Time_min_format_HM < 10)
   {$True_Solar_Time_min_format_HM = "0".$True_Solar_Time_min_format_HM;}
}
else
{
   $True_Solar_Time_min_format_HH = $True_Solar_Time_min_format_H;
   $True_Solar_Time_min_format_HM = "00";
}

$True_Solar_Time_min_format_H = $True_Solar_Time_min_format_HH."H".$True_Solar_Time_min_format_HM;


if ($True_Solar_Time_min/4 < 0)
{
   $Hour_Angle_deg = $True_Solar_Time_min / 4;
   $Hour_Angle_deg = $Hour_Angle_deg +180;
}
else
{
   $Hour_Angle_deg = $True_Solar_Time_min / 4;
   $Hour_Angle_deg = $Hour_Angle_deg -180;
}

$Solar_Zenith_Angle_deg_1 = deg2rad($Hour_Angle_deg);
$Solar_Zenith_Angle_deg_1  = cos($Solar_Zenith_Angle_deg_1 );
$Solar_Zenith_Angle_deg_2 = deg2rad($Sun_Declin_deg);
$Solar_Zenith_Angle_deg_2  = cos($Solar_Zenith_Angle_deg_2 );
$Solar_Zenith_Angle_deg_3 = deg2rad($ma_latitude);
$Solar_Zenith_Angle_deg_3  = cos($Solar_Zenith_Angle_deg_3 );
$Solar_Zenith_Angle_deg_3 = $Solar_Zenith_Angle_deg_1 * $Solar_Zenith_Angle_deg_2 * $Solar_Zenith_Angle_deg_3;
$Solar_Zenith_Angle_deg_4 = deg2rad($Sun_Declin_deg);
$Solar_Zenith_Angle_deg_4 = sin($Solar_Zenith_Angle_deg_4);
$Solar_Zenith_Angle_deg_5 = deg2rad($ma_latitude);
$Solar_Zenith_Angle_deg_5 = sin($Solar_Zenith_Angle_deg_5);
$Solar_Zenith_Angle_deg_5 = $Solar_Zenith_Angle_deg_5  * $Solar_Zenith_Angle_deg_4;   
$Solar_Zenith_Angle_deg = $Solar_Zenith_Angle_deg_5 + $Solar_Zenith_Angle_deg_3;
$Solar_Zenith_Angle_deg = acos($Solar_Zenith_Angle_deg);
$Solar_Zenith_Angle_deg = rad2deg($Solar_Zenith_Angle_deg);

$Solar_Elevation_Angle_deg = 90 - $Solar_Zenith_Angle_deg;

// A FAIRE
$Approx_Atmospheric_Refraction_deg = 0;

$Solar_Elevation_corrected_for_atm_refraction_deg = $Solar_Elevation_Angle_deg + $Approx_Atmospheric_Refraction_deg;


$Solar_Azimuth_Angle_deg_cw_from_N_1 = deg2rad($Solar_Zenith_Angle_deg);
$Solar_Azimuth_Angle_deg_cw_from_N_1 = sin($Solar_Azimuth_Angle_deg_cw_from_N_1);
$Solar_Azimuth_Angle_deg_cw_from_N_2 = deg2rad($ma_latitude);
$Solar_Azimuth_Angle_deg_cw_from_N_2 = cos($Solar_Azimuth_Angle_deg_cw_from_N_2 );
$Solar_Azimuth_Angle_deg_cw_from_N_1 = $Solar_Azimuth_Angle_deg_cw_from_N_1 * $Solar_Azimuth_Angle_deg_cw_from_N_2;
$Solar_Azimuth_Angle_deg_cw_from_N_3 = deg2rad($Sun_Declin_deg);
$Solar_Azimuth_Angle_deg_cw_from_N_3 = sin($Solar_Azimuth_Angle_deg_cw_from_N_3);
$Solar_Azimuth_Angle_deg_cw_from_N_4 = deg2rad($Solar_Zenith_Angle_deg);
$Solar_Azimuth_Angle_deg_cw_from_N_4 = cos($Solar_Azimuth_Angle_deg_cw_from_N_4);
$Solar_Azimuth_Angle_deg_cw_from_N_5 = deg2rad($ma_latitude);   
$Solar_Azimuth_Angle_deg_cw_from_N_5 = sin($Solar_Azimuth_Angle_deg_cw_from_N_5 );
$Solar_Azimuth_Angle_deg_cw_from_N_5 = $Solar_Azimuth_Angle_deg_cw_from_N_5 * $Solar_Azimuth_Angle_deg_cw_from_N_4;
$Solar_Azimuth_Angle_deg_cw_from_N_5 = $Solar_Azimuth_Angle_deg_cw_from_N_5 - $Solar_Azimuth_Angle_deg_cw_from_N_3;   
$Solar_Azimuth_Angle_deg_cw_from_N = acos($Solar_Azimuth_Angle_deg_cw_from_N_5 / $Solar_Azimuth_Angle_deg_cw_from_N_1);   

if ($Hour_Angle_deg > 0)
{
   $Solar_Azimuth_Angle_deg_cw_from_N = rad2deg($Solar_Azimuth_Angle_deg_cw_from_N);
   $Solar_Azimuth_Angle_deg_cw_from_N = $Solar_Azimuth_Angle_deg_cw_from_N + 180;
   $Solar_Azimuth_Angle_deg_cw_from_N = fmod($Solar_Azimuth_Angle_deg_cw_from_N,360);
}
else
{
   $Solar_Azimuth_Angle_deg_cw_from_N = rad2deg($Solar_Azimuth_Angle_deg_cw_from_N);
   $Solar_Azimuth_Angle_deg_cw_from_N = 540 - $Solar_Azimuth_Angle_deg_cw_from_N;
   $Solar_Azimuth_Angle_deg_cw_from_N = fmod($Solar_Azimuth_Angle_deg_cw_from_N,360);
}

$Solar_Azimuth_Angle_deg = round($Solar_Azimuth_Angle_deg_cw_from_N);

// Associé le point cardinal à l'angle
if ($Solar_Azimuth_Angle_deg < '11.25' )
   { $Solar_Cardinal_point = 1;}      // NORD
   
if ($Solar_Azimuth_Angle_deg >= '11.25')
   { $Solar_Cardinal_point = 2;}      // NORD-NORD-EST
   
 if ($Solar_Azimuth_Angle_deg >= '33.75')
   {$Solar_Cardinal_point = 3;}      //NORD-EST
   
 if ($Solar_Azimuth_Angle_deg >= '56.25')
   {$Solar_Cardinal_point = 4;}      //EST-NORD-EST
   
 if ($Solar_Azimuth_Angle_deg >= '67.5')
   {$Solar_Cardinal_point = 5;}      //EST
   
 if ($Solar_Azimuth_Angle_deg >= '101.25')
   {$Solar_Cardinal_point = 6;}      //EST-SUD-EST
   
 if ($Solar_Azimuth_Angle_deg >= '123.75')
   {$Solar_Cardinal_point = 7;}      //SUD-EST
   
 if ($Solar_Azimuth_Angle_deg >= '146.25')
   {$Solar_Cardinal_point = 8;}      //SUD-SUD-EST
   
 if ($Solar_Azimuth_Angle_deg >= '168.75')
   {$Solar_Cardinal_point = 9;}      //SUD
   
 if ($Solar_Azimuth_Angle_deg >= '191.25')
   {$Solar_Cardinal_point = 10;}      //SUD-SUD-OUEST
   
 if ($Solar_Azimuth_Angle_deg >= '213.75')
   {$Solar_Cardinal_point = 11;}      //SUD-OUEST
   
 if ($Solar_Azimuth_Angle_deg >= '236.25')
   {$Solar_Cardinal_point = 12;}      //OUEST-SUD-OUEST
   
 if ($Solar_Azimuth_Angle_deg >= '258.75')
   {$Solar_Cardinal_point = 13;}      //OUEST
   
 if ($Solar_Azimuth_Angle_deg >= '281.25')
   {$Solar_Cardinal_point = 14;}      // OUEST-NORD-OUEST
   
 if ($Solar_Azimuth_Angle_deg >= '303.75')
   {$Solar_Cardinal_point = 15;}      // NORD-OUEST
   
 if ($Solar_Azimuth_Angle_deg >= '326.25')
   {$Solar_Cardinal_point = 16;}      //NORD-NORD-OUEST

   
$content_type = 'text/xml';
sdk_header($content_type);

echo "<Data>";
echo "<Parametres>";
echo "<Latitude>".$ma_latitude."</Latitude>";
echo "<Longitude>".$ma_longitude."</Longitude>";
echo "<jour_diff>".$jour_diff."</jour_diff>";
echo "<Date_1900>".$Date_1900."</Date_1900>";
echo "<Day_year>".$day_year."</Day_year>";
echo "<Time_past_local_midnight>".$Time_past_local_midnight."</Time_past_local_midnight>";
echo "<heure_secondes>".$heure_secondes."</heure_secondes>";
echo "<Time_zone>".$time_zone."</Time_zone>";
echo "</Parametres>";

echo "<Soleil>";
echo "<Julian_Day>".$Julian_Day."</Julian_Day>";
echo "<Julian_Century>".$Julian_Century."</Julian_Century>";
echo "<Geom_Mean_Long_Sun_deg>".$Geom_Mean_Long_Sun_deg."</Geom_Mean_Long_Sun_deg>";
echo "<Geom_Mean_Anom_Sun_deg>".$Geom_Mean_Anom_Sun_deg."</Geom_Mean_Anom_Sun_deg>";
echo "<Sun_Eq_of_Ctr>".$Sun_Eq_of_Ctr."</Sun_Eq_of_Ctr>";
echo "<Sun_True_Long_deg>".$Sun_True_Long_deg."</Sun_True_Long_deg>";
echo "<Sun_True_Anom_deg>".$Sun_True_Anom_deg."</Sun_True_Anom_deg>";
echo "<Eccent_Earth_Orbit>".$Eccent_Earth_Orbit."</Eccent_Earth_Orbit>";
echo "<Sun_Rad_Vector_AUs>".$Sun_Rad_Vector_AUs."</Sun_Rad_Vector_AUs>";
echo "<Sun_App_Long_deg>".$Sun_App_Long_deg."</Sun_App_Long_deg>";
echo "<Mean_Obliq_Ecliptic_deg>".$Mean_Obliq_Ecliptic_deg."</Mean_Obliq_Ecliptic_deg>";
echo "<Obliq_Corr_deg>".$Obliq_Corr_deg."</Obliq_Corr_deg>";
echo "<SunRt_Ascen_deg>".$SunRt_Ascen_deg."</SunRt_Ascen_deg>";
echo "<Sun_Declin_deg>".$Sun_Declin_deg."</Sun_Declin_deg>";
echo "<y>".$y."</y>";
echo "<Eq_of_Time_minutes>".$Eq_of_Time_minutes."</Eq_of_Time_minutes>";
echo "<HA_Sunrise_deg_1>".$HA_Sunrise_deg."</HA_Sunrise_deg_1>";
echo "<Solar_Noon_LST>".$Solar_Noon_LST."</Solar_Noon_LST>";
echo "<Sunrise_Time_LST>".$Sunrise_Time_LST."</Sunrise_Time_LST>";
echo "<Sunset_Time_LST>".$Sunset_Time_LST."</Sunset_Time_LST>";
echo "<Sunlight_Duration_minutes>".$Sunlight_Duration_minutes."</Sunlight_Duration_minutes>";
echo "<True_Solar_Time_min>".$True_Solar_Time_min."</True_Solar_Time_min>";
echo "<True_Solar_Time_min_format_H>".$True_Solar_Time_min_format_H."</True_Solar_Time_min_format_H>";
echo "<Hour_Angle_deg>".$Hour_Angle_deg."</Hour_Angle_deg>";
echo "<Solar_Zenith_Angle_deg>".$Solar_Zenith_Angle_deg."</Solar_Zenith_Angle_deg>";
echo "<Solar_Elevation_Angle_deg>".$Solar_Elevation_Angle_deg."</Solar_Elevation_Angle_deg>";
echo "<Approx_Atmospheric_Refraction_deg>".$Approx_Atmospheric_Refraction_deg."</Approx_Atmospheric_Refraction_deg>";
echo "<Solar_Elevation_corrected_for_atm_refraction_deg>".$Solar_Elevation_corrected_for_atm_refraction_deg."</Solar_Elevation_corrected_for_atm_refraction_deg>";
echo "<Solar_Azimuth>".$Solar_Azimuth_Angle_deg_cw_from_N."</Solar_Azimuth>";
echo "<Solar_Azimuth_round>".$Solar_Azimuth_Angle_deg."</Solar_Azimuth_round>";
echo "<Solar_Cardinal_point>".$Solar_Cardinal_point."</Solar_Cardinal_point>";

echo "</Soleil>";
echo "</Data>";

?>

... et voila un peu de lecture pour ceux que ça intéresse:
http://www.passivact.com/Infos/InfosConcepts/files/Bioclimatisme-TrajectoiresSolaires.html

Bonne intégration
vva
 
Messages : 381
Inscription : 12 Juin 2013


Re: calcul position du soleil

Messagepar Havok » 03 Juin 2015 15:21

Bon je confirme que le sinus c'est bien mieux que le cosinus :D
Havok
 
Messages : 702
Inscription : 06 Fév 2015

Re: calcul position du soleil

Messagepar vva » 03 Juin 2015 15:38

:D
vva
 
Messages : 381
Inscription : 12 Juin 2013

Re: calcul position du soleil

Messagepar pablo » 03 Juin 2015 20:46

de mon cote je me retrouve avec ce peripherique en dfaut toute les nuits et une foi le matin leve tout rentre dans l'ordre
Eedomus 254 périphs
63 périphs zwave // 5 camera // 39 périphs 433mhz // 19 périphériques http // 10 périphs météo // 29 périphs virtuels // 1 périphs geo // 17 périphs conso

eedomus + casa
pablo
 
Messages : 322
Inscription : 11 Avr 2014

Re: calcul position du soleil

Messagepar vva » 04 Juin 2015 07:50

Salut,
Tu peux me faire une copie d'écran de la configuration du périf et de l'historique.

stp
vva
 
Messages : 381
Inscription : 12 Juin 2013

Re: calcul position du soleil

Messagepar pablo » 04 Juin 2015 10:55

Image

comme tu peu le voir je n'ai aucun contact la nuit et donc je me retrouve avec un message d'erreur
Eedomus 254 périphs
63 périphs zwave // 5 camera // 39 périphs 433mhz // 19 périphériques http // 10 périphs météo // 29 périphs virtuels // 1 périphs geo // 17 périphs conso

eedomus + casa
pablo
 
Messages : 322
Inscription : 11 Avr 2014

Re: calcul position du soleil

Messagepar vva » 04 Juin 2015 11:58

Et la copie d'écran de la configuration du capteur stp
vva
 
Messages : 381
Inscription : 12 Juin 2013

Re: calcul position du soleil

Messagepar pablo » 04 Juin 2015 14:56

Image

voila :D
Eedomus 254 périphs
63 périphs zwave // 5 camera // 39 périphs 433mhz // 19 périphériques http // 10 périphs météo // 29 périphs virtuels // 1 périphs geo // 17 périphs conso

eedomus + casa
pablo
 
Messages : 322
Inscription : 11 Avr 2014

Re: calcul position du soleil

Messagepar vva » 04 Juin 2015 15:00

Merci

Tente sans les guillemets dans les variables VAR1 et VAR2 et assure toi qu'il y a bien des points et pas de virgule dans ces valeurs.
vva
 
Messages : 381
Inscription : 12 Juin 2013

Re: calcul position du soleil

Messagepar pablo » 04 Juin 2015 15:05

j'ai bien des points, je tente sans les guillemets 8-)

je tiendrais au courant
Eedomus 254 périphs
63 périphs zwave // 5 camera // 39 périphs 433mhz // 19 périphériques http // 10 périphs météo // 29 périphs virtuels // 1 périphs geo // 17 périphs conso

eedomus + casa
pablo
 
Messages : 322
Inscription : 11 Avr 2014

Re: calcul position du soleil

Messagepar pablo » 05 Juin 2015 10:46

je n'ai pas eu de message d'erreur :D
Eedomus 254 périphs
63 périphs zwave // 5 camera // 39 périphs 433mhz // 19 périphériques http // 10 périphs météo // 29 périphs virtuels // 1 périphs geo // 17 périphs conso

eedomus + casa
pablo
 
Messages : 322
Inscription : 11 Avr 2014

Re: calcul position du soleil

Messagepar vva » 05 Juin 2015 10:53

Bonne nouvelle, le problème venant donc des guillemets ?!
vva
 
Messages : 381
Inscription : 12 Juin 2013

Re: calcul position du soleil

Messagepar NicoLeOca » 11 Juin 2015 19:11

Salut vva,
Merci tout d'abord pour ton script, beau boulot, dont j'aurais été bien incapable.

J'ai quelques soucis avec la mise en place des capteurs HTTP avec ton script.
Aucun soucis sur l'élevation, par contre, l'azimuth et les points cardinaux me donnent des valeurs vides (donc en erreur).
Je précise que mes VAR1 & 2 sont bien mes latitudes et longitudes sans guillemet avec des points et non des virgules.
voici les screenshots de mes configs.
Savez-vous me dire ou je me trompe?

Image
Image
Image

D'avance merci

NicoLeOca
NicoLeOca
 
Messages : 27
Inscription : 13 Mars 2014

Re: calcul position du soleil

Messagepar vva » 11 Juin 2015 20:06

Salut,
A premiére vue pas d'erreur. Peux tu me donner le resultat au format xml en appelant le script depuis un navigateur.
Exemple http:\\IP_BOX/script/?exec=position_soleil.php&latitude=48.387942&longitude=2.294496

Bonne soirée
vva
 
Messages : 381
Inscription : 12 Juin 2013

Re: calcul position du soleil

Messagepar NicoLeOca » 11 Juin 2015 20:14

Merci pour l'aide
Voici le fichier

<Data>
<Parametres>
<Latitude>******</Latitude>
<Longitude>*******</Longitude>
<jour_diff>79</jour_diff>
<Date_1900>42167</Date_1900>
<Day_year>161</Day_year>
<Time_past_local_midnight>0.88438657407407</Time_past_local_midnight>
<heure_secondes>76411</heure_secondes>
<Time_zone>2</Time_zone>
</Parametres>
<Soleil>
<Julian_Day>2457186.3010532</Julian_Day>
<Julian_Century>0.15445040529063</Julian_Century>
<Geom_Mean_Long_Sun_deg>80.799958251165</Geom_Mean_Long_Sun_deg>
<Geom_Mean_Anom_Sun_deg>5917.5970137019</Geom_Mean_Anom_Sun_deg>
<Sun_Eq_of_Ctr>0.71559488836474</Sun_Eq_of_Ctr>
<Sun_True_Long_deg>81.51555313953</Sun_True_Long_deg>
<Sun_True_Anom_deg>5918.3126085903</Sun_True_Anom_deg>
<Eccent_Earth_Orbit>0.016702138345893</Eccent_Earth_Orbit>
<Sun_Rad_Vector_AUs>1.0154821971925</Sun_Rad_Vector_AUs>
<Sun_App_Long_deg>81.510388657213</Sun_App_Long_deg>
<Mean_Obliq_Ecliptic_deg>23.437282610245</Mean_Obliq_Ecliptic_deg>
<Obliq_Corr_deg>23.434738128653</Obliq_Corr_deg>
<SunRt_Ascen_deg>80.759791347615</SunRt_Ascen_deg>
<Sun_Declin_deg>23.162886947534</Sun_Declin_deg>
<y>0.04301733698829</y>
<Eq_of_Time_minutes>0.13937084220645</Eq_of_Time_minutes>
<HA_Sunrise_deg_1>120.85072790556</HA_Sunrise_deg_1>
<Solar_Noon_LST>0.57751503135958</Solar_Noon_LST>
<Sunrise_Time_LST>0.24181856495524</Sunrise_Time_LST>
<Sunset_Time_LST>0.91321149776392</Sunset_Time_LST>
<Sunlight_Duration_minutes>966.80582324449</Sunlight_Duration_minutes>
<True_Solar_Time_min>1161.8950215089</True_Solar_Time_min>
<True_Solar_Time_min_format_H>19H22</True_Solar_Time_min_format_H>
<Hour_Angle_deg>110.47375537722</Hour_Angle_deg>
<Solar_Zenith_Angle_deg>85.171182523329</Solar_Zenith_Angle_deg>
<Solar_Elevation_Angle_deg>4.8288174766707</Solar_Elevation_Angle_deg>
<Approx_Atmospheric_Refraction_deg>0</Approx_Atmospheric_Refraction_deg>
<Solar_Elevation_corrected_for_atm_refraction_deg>4.8288174766707</Solar_Elevation_corrected_for_atm_refraction_deg>
<Solar_Azimuth>300.1877035588</Solar_Azimuth>
<Solar_Azimuth_round>300</Solar_Azimuth_round>
<Solar_Cardinal_point>14</Solar_Cardinal_point>
</Soleil>
</Data>
NicoLeOca
 
Messages : 27
Inscription : 13 Mars 2014

PrécédentSuivant

Retour vers Scripts & Périphériques du store

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 22 invité(s)