Aller au contenu

Heure De Levé Et Couché Du Soleil


franckg16

Messages recommandés

Ma HC2 me donnent des valeurs qui ne correspondent pas à  ma position géographique (France / région parisienne) pour les valeurs de levé et couché de soleil.

Les lignes :
fibaro:debug(fibaro:getValue(1, "sunriseHour"));
fibaro:debug(fibaro:getValue(1, "sunsetHour"));
donnent ces résultats :
[DEBUG] 10:15:45: 05:27
[DEBUG] 10:15:45: 20:31
 
au lieu de (à  ce jour) :
06:36 

21:15

 

Mes paramètres sont correctes dans Configuration / Situation géographique : Fuseau Horaire, latitude et longitude.

 

Merci de votre aide

Lien vers le commentaire
Partager sur d’autres sites

je viens de m'apercevoir hier soir que moi aussi, mes variables sunset et sunrise ne se mettent plus àjour.

j'ai aujourd'hui sunset à21:47 et sunrise à06:044.

même après redémarrage de le box, cela ne se met pas a jour.

je me demande si cela ne vient pas de la derniere mise a jour.

Lien vers le commentaire
Partager sur d’autres sites

un certain temps après le reboot de la box, les paramètres se sont mis àjour.

il va falloir que je suive l'évolution de ces paramètres de près, afin de savoir ce qui les a bloqué.

affaire àsuivre ....

Lien vers le commentaire
Partager sur d’autres sites

Pour ma part, je n'avais pas renseigné la latitude et longitude dans Configuratiion --> Situation Géographique.

Seulement après avoir correctement mis à  jour ces paramètres, les heures de levé et couché du soleil étaient toujours incorrectes, d'où l'ouverture de ce post.

J'ai écrit au support Fibaro qui m'a expliqué qu'il faut simplement attendre plusieurs heures afin que la HC2 se synchronise. Effectivement le lendemain (et aussi après un redémarrage il me semble), les heures étaient correctes.

Lien vers le commentaire
Partager sur d’autres sites

J'avais une vingtaine de mn de décalage et après reboot c'est juste.

Il faut déjà  une scène pour faire un reset de l'horloge qui a une certaine dérive, il va falloir faire de même pour le couché du soleil !!! :( 

 

C'est pas beau Fibaro ???

Lien vers le commentaire
Partager sur d’autres sites

Cela ne va pas mettre à  jour les données de fibaro mais juste mettre les heures ... les vrais de vrais dans un VD.
 
Ci dessous le code du main loop.

if (not SunTools) then
	
  SunTools = {
  
		decalage = 2,
    	daylightsavings = true,
    	lat = 0,
    	long = 0,

		getLatLong = function(Self) 
      		if (Self.lat == 0 or Self.long == 0) then
    			HC2 = Net.FHttp("127.0.0.1", 11111)
        		response = HC2:GET("/api/settings/location")
				response = json.decode(response)      
        		Self.lat = response.latitude
        		Self.long = response.longitude
        		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblLatLong.value", Self.lat .. "/" .. Self.long)
        	end
		end,
    
    	getData = function(Self)
      		    HC2 = Net.FHttp("api.sunrise-sunset.org")
      			response = HC2:GET("/json?lat="..Self.lat.."&lng=".. Self.long)
				response = json.decode(response)      
      			local rise = Self:toHour(response.results.sunrise)
      			local set = Self:toHour(response.results.sunset)
      			local duree = response.results.day_length
    			fibaro:debug(response.results.sunrise .. " -> " .. rise)
    			fibaro:debug(response.results.sunset .. " -> " .. set)
      			fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblSunrise.value", rise)
      			fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblSunset.value", set)
      			fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblLength.value", duree)
      	end,
    
    	toHour = function(Self, s)
      			local pattern = "(%d+)%d+)%d+) (%a+)"
      			local h,m,s,am = s:match(pattern)
      			local decalage = Self.decalage
      			if (Self.daylightsavings and not os.date("*t", os.time()).isdst) then
        			decalage = decalage - 1
        		end
      			h = h + decalage
      			if (am == "PM") then 
        			h = h + 12 
      			end
      			if (h > 23) then h = 0 end
      			return h .. ":" .. m .. ":" .. s
      	end,
  }
end

if (not instance) then
    instance = { lastrun = 0, every = 1 }
  	fibaro:debug("first run")
end

SunTools:getLatLong()

diff = os.date("*t", os.difftime(os.time(), instance.lastrun))
if (diff.hour > instance.every) then
	SunTools:getData()  
  	instance.lastrun = os.time()
end




.

.

Edit : code modifié pour prendre en compte le décalage horaire précisé par Barelle ICI

  • Upvote 2
Lien vers le commentaire
Partager sur d’autres sites

top !! 

 

Ca m'inquiète maitre, je commence a comprendre des lignes..c'est vraiment pas bon,ca doit etre le soleil ;-)

mais tout ca ne me vient pas encore à  l'idee lol

les patterns faut vraiment que j'y mette ;-)

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Bravo Steven, cela marche au poil...

 

Pour éviter de devoir mettre à  jour la variable decalage à  chaque changement d'heure, je te propose d'insérer dans la fonction "toHour" le code suivant après la déclaration "local h,m,s,am = s:match(pattern)"

if (maintenant.isdst) then
    Self.decalage = 2; -- Heure d'été
else
    Self.decalage = 1; -- Heure d'hiver
end

étant entendu que cela est valable pour la France métropolitaine, puisque cela ne prend pas en compte le fuseau horaire.

 

  • Upvote 2
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...