Aller au contenu
Nico

Positionnement Du Soleil

Recommended Posts

@CaptainIgloo, chez moi le caclul me cela retourne ça :

[DEBUG] 21:37:50: AzimutFenetre : 200°
[DEBUG] 21:37:50: LargeurFenetre : 180 cm, EpaisseurFenetre : 30 cm, HauteurFenetre : 210cm
[DEBUG] 21:37:50: Seuils gauche d'incidence Azimutale dans la fenetre : 119.46°
[DEBUG] 21:37:50: Seuils droit d'incidence Azimutale dans la fenetre : 280.54°
[DEBUG] 21:37:50: Seuil haut d'incidence zenitale dans la fenetre : 81.87°
[DEBUG] 21:37:50: PosSoleilAzimut : 301.02563180577°
[DEBUG] 21:37:50: -----------------------------------------
[DEBUG] 21:37:50: Soleil àdroite de la fenêtre

A partir de làje compare si je suis dans la fenêtre d'incidence Azimutale mais comment tu fais pour incidence zenitale ? Tu compares juste le seuil avec l'angle actuel ?

-- Fonction pour réduire à2 décimales
function round(num, dec)
  local mult = 10^(dec or 0)
  return math.floor(num * mult + 0.5) / mult
end
 
local AzimutFenetre = 200 --Mettre ici l azimut/orientation de la fenetre en degre (°), pour moi plein sud = 180°
local LargeurFenetre = 180
local EpaisseurFenetre = 30
local HauteurFenetre = 210
local PosSoleilAzimut = tonumber( fibaro:getGlobalValue( "PosSoleilAzimut" ) ); 

fibaro:debug("AzimutFenetre : " .. AzimutFenetre .. "°");
fibaro:debug("LargeurFenetre : " .. LargeurFenetre .. " cm, "
  			.. "EpaisseurFenetre : " .. EpaisseurFenetre .. " cm, " 
  		 	.. "HauteurFenetre : " .. HauteurFenetre .. "cm");

-- Seuils gauche et droit d incidence Azimutale dans la fenetre = Az + ou - cet angle
masqueAz = round(math.deg(math.atan(LargeurFenetre/EpaisseurFenetre)),2)
masqueAzG = round(AzimutFenetre-math.deg(math.atan(LargeurFenetre/EpaisseurFenetre)),2)
masqueAzD = round(AzimutFenetre+math.deg(math.atan(LargeurFenetre/EpaisseurFenetre)),2)

fibaro:debug("Seuils gauche d incidence Azimutale dans la fenetre : " .. masqueAzG .. "°")
fibaro:debug("Seuils droit d incidence Azimutale dans la fenetre : " .. masqueAzD .. "°")

-- Seuil haut d'incidence zenitale dans la fenetre = Horizon + cet angle
masqueElev = round(math.deg(math.atan(HauteurFenetre/EpaisseurFenetre)),2)
fibaro:debug("Seuil haut d'incidence zenitale dans la fenetre : " .. masqueElev .. "°")

  
fibaro:debug("PosSoleilAzimut : " .. PosSoleilAzimut .. "°");
fibaro:debug("-----------------------------------------");

if (PosSoleilAzimut > masqueAzG 
      and PosSoleilAzimut < masqueAzD) then
 fibaro:debug("Soleil dans la fenêtre")
elseif (PosSoleilAzimut < masqueAzG) then
  fibaro:debug("Soleil àdroite de la fenêtre")
elseif (PosSoleilAzimut > masqueAzD) then
  fibaro:debug("Soleil àdroite de la fenêtre")
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Si vous voulez j'ai partager un scène jours nuits avec decalage possible

Partager ce message


Lien à poster
Partager sur d’autres sites

Je n'avais pas pensé àcela mais je me retrouve avec une Elevation à-3° :huh:

[DEBUG] 21:50:33: -----------------------------------------
[DEBUG] 21:50:33: AzimutFenetre : 200°
[DEBUG] 21:50:33: LargeurFenetre : 180 cm, EpaisseurFenetre : 30 cm, HauteurFenetre : 210cm
[DEBUG] 21:50:33: -----------------------------------------
[DEBUG] 21:50:33: Seuils gauche d'incidence Azimutale dans la fenetre : 119.46°
[DEBUG] 21:50:33: Seuils droit d'incidence Azimutale dans la fenetre : 280.54°
[DEBUG] 21:50:33: Seuil haut d'incidence zenitale dans la fenetre : 81.87°
[DEBUG] 21:50:33: -----------------------------------------
[DEBUG] 21:50:33: [Azimut] Soleil àdroite de la fenêtre(304°)
[DEBUG] 21:50:33: [Elevation] Soleil couché (-4°)
[DEBUG] 21:44:47: Seuil haut d'incidence zenitale dans la fenetre : 81.87°
[DEBUG] 21:44:47: -----------------------------------------
[DEBUG] 21:44:47: PosSoleilAzimut : 303°
[DEBUG] 21:44:47: PosSoleilElevation : -3°
[DEBUG] 21:44:47: -----------------------------------------
[DEBUG] 21:44:47: Soleil àdroite de la fenêtre
[DEBUG] 21:44:47: Soleil dans la fenêtre

Partager ce message


Lien à poster
Partager sur d’autres sites

darklite44,

pour l'angle zenital effectivement on compare àl'angle d'élévation solaire. On ourrait aussi avoir un masquage tel qu'une terrasse couverte ou un toit plongeant ...

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui par exemple j'ai la maison de mes voisins. Donc il faut que je prenne en compte ce facteur <_<

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Captain, c'est àdire un décalage ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@nico

Oui il y a un décalage entre l'heure du coucher de soleil et son élévation sur l'horizon qui devrait être à0°.. Hier j'avais 21:04 comme coucher mais j'étais à-1,4 en élévation.

Partager ce message


Lien à poster
Partager sur d’autres sites

Normal, il y avait une grosse vague sur la mer devant chez toi, elle a donc caché le soleil plus tôt. L'algo en tient compte :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Enooorme ce que vous faites messieurs, ca va etre vraiment precis pou gerer les volets et autre ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

@al1_fibaro,

Je crois avoir trouvé l'origine de l'erreur (décalage). Cela vient selon moi du jour de l'année (DoY : Day of Year) qui s'appuie sur 365,25 jours par an au lieu de déterminer si l'année est bissextile.

Avec la fonction suivante tu peux déterminer 365 ou 366 selon l'année en question :

function isLeapYear(year)
  return year%4==0 and (year%100~=0 or year%400==0)
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Et cela fonctionne Captain ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Voilà  ce que ça donne : 

function calcul_jour_julien(jour, mois, annee, heure, minute, seconde)
  local month
  local year
  local day
  local days
  local a
  local b
  local jour_julien
  day   = jour + heure /24 + minute/ 1440 + seconde / 86400
  year  = annee
  month = mois
  if month==1 or month==2 then
    year=year - 1
    month=month + 12
  end
  if isLeapYear(year) then
    days=365.25
	else
    days=365
  end
  a = math.floor(year / 100)
  b = 2 - a + math.floor( a / 4)
  jour_julien = math.floor( days * ( year + 4716)) + math.floor(30.6001*(month+1.0)) + day + b - 1524.5  
  return jour_julien
end

Avec correctif


[DEBUG] 11:57:12: 19/05/15 11:57:12
[DEBUG] 11:57:12: Altitude 30.42 °, azimut 147.17 °.

Sans correctif

[DEBUG] 11:56:08: 19/05/15 11:56:08
[DEBUG] 11:56:08: Altitude 53.05 °, azimut 128.26 °.

 

La différence me parait énorme. Je me suis planté quelque part ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Effectivement, c'est énorme. Car moi quand je compare mes données avec celles du site que j'avais mis plus haut dans le topic, la donnée de base était précise àmon de 1 degré prêt, donc...

Partager ce message


Lien à poster
Partager sur d’autres sites

Je n'avais pas vu cette ligne également à  corriger :

local nb_siecle = jour_nouveau/(days*100)

Sans correctif

[DEBUG] 12:06:31: 19/05/15 12:06:31
[DEBUG] 12:06:31: Altitude 32.11 °, azimut 152.64 °.
 
Avec correctif
[DEBUG] 12:06:55: 19/05/15 12:06:55
[DEBUG] 12:06:55: Altitude 32.14 °, azimut 152.75 °.

Partager ce message


Lien à poster
Partager sur d’autres sites

Personnellement je compare à  l'app sun seeker.

 

Non il faut utiliser la fonction pour avoir le nombre de jour de l'année. 365 et 366 pour les année bissextile.

Si la fonction revoie true le calcul doit partir sur 366 Jours, si false sur 365, et jamais 365.25.

-- Si bissextile la fonction renvoie true sinon false
function isLeapYear(annee)
  return annee%4==0 and (annee%100~=0 or annee%400==0)
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Moi je compare avec le site SunEarthtool.com qui fonctionne bien aussi.

Partager ce message


Lien à poster
Partager sur d’autres sites

 

Personnellement je compare à  l'app sun seeker.

 

Non il faut utiliser la fonction pour avoir le nombre de jour de l'année. 365 et 366 pour les année bissextile.

Si la fonction revoie true le calcul doit partir sur 366 Jours, si false sur 365, et jamais 365.25.

-- Si bissextile la fonction renvoie true sinon false
function isLeapYear(annee)
  return annee%4==0 and (annee%100~=0 or annee%400==0)
end

Effectivement je m'étais contenté de copier l'existant...

Partager ce message


Lien à poster
Partager sur d’autres sites

Bah non, on t'attendais pour te voter membre du mois... :)

 

Moi j'ai pas le temps, rien que refaire toute ma HC2 aujourd'hui j'en ai encore pour des heures et des heures...

Partager ce message


Lien à poster
Partager sur d’autres sites

 

 

vd_positionsolaire.png

 

J'avance doucement, par contre il y a un décalage entre couchers de soleil.

 

Tu avais l'air d'avoir bien travaillé avec tes icones CaptainIgloo

Partager ce message


Lien à poster
Partager sur d’autres sites

Yop yop :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne comprend pas pourquoi il y'a autant de différence entre les résultats du module virtuel et le site sunearthtools : 

[DEBUG] 14:15:23: Altitude 31.41 °, azimut 191.23 °.

Cela fait plus de 30° d'écart :

 

position du soleil    Info Elevation Azimut latitudes longitudes
29/05/2015   14:16 | GMT1 63.87° 188.42° 47.544174° N 0.673835° W

 

Une idée ?

 

J'ai trouvé 2 autres sites pas mal pour comparer : 

Partager ce message


Lien à poster
Partager sur d’autres sites

×