Aller au contenu

Sunrisehour, Sunsethour, Os.date Et Variable Jour_Nuit


Messages recommandés

Posté(e)

whaw, mes vieux neurones chauffent àla fin de la lecture ...

allez mprinfo, un tuto dans HC pour les nuls. Merci

  • Upvote 1
Posté(e)

Oula ! Suis en vacances et j'étais passé à  côté du post ! Piou ! Vous êtes chaud ;)

Mprinfo j'avais même pas vu ton MP :)

 

Steven ressort même le précis sur les variables ;) j'adore ! 

  • Upvote 1
Posté(e)

@mprinfo

 

Ligne 72 ? (le message me semble pas logique :) )

Ligne 30 ... remplacer le else par un end  (si, si, je ne suis pas fou) :)

 

J'ai pas bien compris l'utilité des tableaux Lever et Coucher ? Toutes les minutes tu vas parcourir ces 2 tableaux pour comperer l'heure du lever ou coucher avec les décalages du tableau. Donc dans le cas du lever, tu vas mettre 9 fois à  jour la variable ? Ou alors, il faut adapter le tableau à  nos besoins et dans ce cas, c'est juste pas très clair (ou j'ai pas tout suivis).

 

A heure précises du lever ou coucher, la variable sera mise à  jour 2x : une fois par LevelCoucher(...) et une fois par traitement(...)

 

Une idée d'amélioration serait de mettre un fibaro:sleep() plus intelligent, çad si le lever et le coucher sont dans plus de 30mn alors faire un sleep de 30mn au lieu de 1mn.

 

Allez 

:98:

Posté(e)

"Pour faire des triggers" .. pas con du tout .. j'avais pas lu le code avec suffisamment d'attention. C'est une bonne idée :60: .

Au fait, j'avais pas fait attention qu'on était sur des VG bien différent .. méa culpa.

 

 

A mon âge, plus les sleep son long mieux c'est :)

 

 

Il y a pas de seek à  ma connaissance, les seuls moyens sont soit de parcourir la table (bof), soit de la trier et en prendre les 2 extrémités :

 

Exemple de code avec tri :


-- Table simple de numéro ---
local t1 = {10,25,30,5}
table.sort(t1)
for i = 1, #t1 do
  print(t1[i])
end

-- table plus compliquée --
local t2 = {
	{index=10, nom="Dix"},
  	{index=2, nom="Deux"},
  	{index=5, nom="Cinq"},
  	{index=1, nom="Un"}
}
table.sort(t2, function(a, return a.index < b.index end)
for i = 1, #t2 do
  print(t2[i].nom)
end

-- pour finir --
print("Min : " .. t2[1].nom)
print("Max : " .. t2[#t2].nom)

  • Upvote 1
Posté(e)

@mprinfo,

reuuu désolé beaucoup de taf cette semaine, inventaire et tout le bazar qui va avec !

 

Je vais tester ta scène avec la version 2.20b

 

je te reviens plus tard

Posté(e) (modifié)

@mprinfo

 

Voici mon débug

[DEBUG] 10:41:41: La box a démarré le 01/05/2015 a 10:41
[DEBUG] 10:41:41: Lever Soleil : 06:56 - Coucher Soleil : 21:26
[DEBUG] 10:41:41: Mise a jour de la Variable Globale : Jour_Nuit = Jour
[DEBUG] 10:41:41: Mini Lever -55
[DEBUG] 10:41:41: Maxi Lever 60
[DEBUG] 10:41:41: Mini Lever -130
[DEBUG] 10:41:41: Maxi Lever 48

Par contre dans une scène si on veut faire commencer l'allumage d'une lumière par exemple 15 min après le soleil, c'est auto ou manuel ?

 

PS = faut-il retirer l'ancien script avec la variable jour nuit ? et prendre que celle-ci maintenant !

Modifié par cybersquat
  • 7 mois après...
Posté(e)
 

Pensé vous qu'il est possible de créée une VD compte-a-rebour

paramétrable depuis note tablette ou smartphone  

 

un bouton : Minute

un bouton : heure

un bouton : validé

 

le principe:  si je valide 10mm alors dans 10mm passe une variable temps de 0  à   1

 

 

Dans GEA actuellement, si on souhaite éteindre un WP dans 10mm:

 



GEA.add(........ , 10*60, "", {{"turnOff", id["wallplug_ch"]}})


le problème est que si on souhaite modifier ce temps de 10mm à  25mm il nous faut rentrée dans GEA et le modifier

 

 

 

 

l'idée est: qu'à  partir de notre téléphone ou tablette on puisse changer à  tout moment ce temps 

 

-----si wallplug_ch plus de 10w alors valide le bouton de notre VD compte-a-rebour  préalablement réglée su 10mm

 



GEA.add({"power", "wallplug_ch", "10"} , -1, "", {{"VirtualDevice", <id,_module>, valide}})


-----si variable temps = 1    alors   off    wallplug_ch        et  repasse la variable Temps à  0



GEA.add({"Global", "temps", "1"} , -1, "", {{"turnOff", id["wallplug_ch"]}, {"Global", "temps", "0"}})

  • 1 an après...
  • 11 mois après...
Posté(e)

Salut !!! :D

Petite question :

Comment faire pour connaitre le N° de la semaine d'une date précise :

-- NumSemaineEnCours = tostring(os.date("%V"))

 

DateMax = "31/12/" .. YYYY

NumSemaineDateMax = ?

  • 2 ans après...
Posté(e) (modifié)
Le 25/03/2015 à 18:26, mprinfo a dit :
  • L'heure Actuelle

Var_Heure = os.date("%H:%M", os.time())

 

Je viens de me rendre compte (pas sur HC2, mais HC3/HC3L) que :

print(os.date("%H:%M", os.time()))

donne 19:18

 

 

et que :

print(os.date("%H:%M"))

donne également 19:18

 

 

Du coup, je ne comprends pas bien la différence, et surtout ce qui est le plus propre à utiliser dans nos codes... <_<

Modifié par Fredmas
Posté(e)

C'est pareil.

 

Le second argument est facultatif.

Si tu ne le mets pas, il prend l'heure courante.

Dans ton cas, en second argument, tu as mis l'heure courante (obtenue via os.time()) donc forcément il affiche la même heure.


Mais si en second argument tu avais mis n'importe quel autre heure (stockée dans une variable, résultat d'un calcul savant, etc), alors il t'aurait formaté cette heure là.

  • Like 1
Posté(e)

Quitte à parler de Sunrisehour et Sunsethour dans ce sujet, quelqu'un sait-il où le contrôleur va-t-il cherche ces 2 informations ? Via le serveur NTP ? Via YR Weather peut-être ? :D

 

 

Là où je souhaite en venir in fine, c'est que pour la météo par exemple, on peut modifier les sources d'information du contrôleur via un QA de type com.fibaro.weather avec ce bout de code et un changement dans les  :

function QuickApp:setCondition(condition)
	local conditionCodes = { 
		unknown = 3200,
		clear = 32,
		rain = 40,
		snow = 38,
		storm = 666,
		cloudy = 30,
		fog = 20,
	}
	local conditionCode = conditionCodes[condition]
	if conditionCode then
		self:updateProperty("ConditionCode", conditionCode)
		self:updateProperty("WeatherCondition", condition)
		self:updateProperty("Temperature", blabla3)
		self:updateProperty("Wind", blabl4)
		self:updateProperty("Humidity", blabla5)
	end
end

 

A l'image des conditions météo, quid des horaires de lever et de coucher du soleil ?

(si possible, si besoin, ou à défaut pour comprendre le fonctionnement) existe-il un moyen de vérifier / modifier la source de ça : api.get("/settings/info").sunriseHour et api.get("/settings/info").sunsetHour

Posté(e)

L'heure courante récupérée avec os.time(), c'est celle du système (gérée par la carte mère avec son propre quartz)

En tâche de fond, le démon NTP permet d'aller chercher l'heure à intervalle régulier sur les serveurs de référence sur Internet, et de remettre à le bonne heure l'horloge de la carte mère (qui dérive plus ou moins vite)

C'est ainsi que ça fonctionne sur tous les ordinateurs.

 

Les horaires de lever et coucher du soleil sont calculés par Fibaro en fonction de la localisation de la box (coordonnées latitude et longitude configurées dans les paramètres)

Quel algorithme de calcul ils utilisent, je n'en sais rien....

 

 

Concernant la météo, il y a celle du système (/api/weather) qui est mise à jour à partir de la source configurée dans les paramètres :

image.png.e75ed81a1b52e5dfeae824ab174e39e5.png

Dont soit YR Weather par défaut, soit un autre QA importé ou de notre création.

 

Le bout de code que tu as donné, c'est pour mettre à jour les propriétés du module météo (un QA donc visible via /api/devices/ID), pas du système.

Pour cela, il faut paramétrer ledit QA comme source de météo comme indiqué dans la capture d'écran juste au-dessus.

 

Donc non, si on veut être précis, ton bout de code ne permet pas de "modifier les sources d'information du contrôleur", mais seulement d'ajouter une nouvelle source.... pour modifier la source, là encore, capture d'écran ci-dessus :)

 

 

 

Bref, la météo, tu peux modifier la source à ta convenance.

L'heure système et les horaires de coucher/lever du soleil, tu ne peux pas. Encore heureux. Ou alors tu modifies ton fuseau horaire et ta localisation, mais en réalité tu n'as pas changé les heures, mais juste "déplacé" la box dans l'espace.

×
×
  • Créer...