ekperso Posté(e) le 10 mars 2019 Signaler Posté(e) le 10 mars 2019 Bonjour à tous. J'ai écrit un script qui se lance tous les jours à 10H et qui met à jour la variable "startH" correspondant à l'heure d'allumage du chauffage de mon jacuzzi selon divers paramètres. J'aimerais créer un script permettant d'allumer mon chauffage à l'heure contenue dans cette variable "startH", par exempe 15H. Ca semble simple, mais je n'y arrive pas ! Le contenu de ce srcipt et basique : fibaro:get(269, "turnON"), mais il faut juste le trigger à l'heure "startH"... J'aimerais éviter de passer par une boucle "while true do" (que je n'arrive pas écrire) mais si c'est la solution, je prends :-) A vot'bon coeur m'sieur dames ! Eric
yoim Posté(e) le 12 mars 2019 Signaler Posté(e) le 12 mars 2019 Tu veux juste allumer ton chauffage a 15h et enregistré sa valeur dans une variable, c'est ca ?
ekperso Posté(e) le 12 mars 2019 Auteur Signaler Posté(e) le 12 mars 2019 Merci pour ton intérêt. Pas tout à fait, je veux allumer mon chauffage à l'heure contenue dans la variable "startH"... ca change tout :-) PArfois il démarrera à 11H, d'autres à 15H, en fonction de la température int/ext notamment.
Indyana Posté(e) le 12 mars 2019 Signaler Posté(e) le 12 mars 2019 (modifié) while true do heure = fibaro:getGlobal('startH') if(tonumber(os.date('%H%M'))==heure) then fibaro:get(269,'turnON) end fibaro:sleep(60*1000) end Pas testé mais ça devrait faire ce que tu veux. Modifié le 12 mars 2019 par Indyana 1
ekperso Posté(e) le 13 mars 2019 Auteur Signaler Posté(e) le 13 mars 2019 Merci Indyana, ça me permet de mieux comprendre le "while true do", top, je vais essayer ça ce soir.
ekperso Posté(e) le 13 mars 2019 Auteur Signaler Posté(e) le 13 mars 2019 Encore merci, j'ai du fair equelques modifs suite à des test et ca marche ! Pour info, le script qui va bien : while true do heure = fibaro:getGlobal('startH') if(tonumber(os.date('%H%M%S')) == tonumber(heure)) then fibaro:call(269,"turnOn") end fibaro:sleep(1*1000) end
pepite Posté(e) le 14 mars 2019 Signaler Posté(e) le 14 mars 2019 Le sleep est pas très beau ;-) un setTimeout() serait plus sympa ;-)
Indyana Posté(e) le 16 mars 2019 Signaler Posté(e) le 16 mars 2019 (modifié) Quel est la différence entre les deux? Ha j'ai trouvé une petite explication de la différence entre les deux, par contre aucun inintérêt ici me semble t'il, on ne veut pas continuer le script! Ou je me trompe sur l'utilisation de setTimeout? Modifié le 16 mars 2019 par Indyana
ekperso Posté(e) le 16 mars 2019 Auteur Signaler Posté(e) le 16 mars 2019 C'est ce que j'ai compris. Ici, mon script n'a rien d'autre à faire. Par contre, si vous savez comment eviter un "While True do" apparemment c''est possible et consomme moins de ressources, je suis preneur. Merci à tous, Eric
Indyana Posté(e) le 16 mars 2019 Signaler Posté(e) le 16 mars 2019 Tu peux l'éviter en intégrant ce code à une fonction et en utilisant le setimetout à la fin de la fonction qui va rappeler la fonction de façon récursive. Mais il n'y a aucun intérêt à part se faire plaisir, ta boucle dowhile ne consomme rien pendant l'attente (sleep) soit 99,9% du temps. Le reste du temps c'est une exécution de code classique.
Indyana Posté(e) le 16 mars 2019 Signaler Posté(e) le 16 mars 2019 Je n'avais pas vu les modifications que tu as faites, là oui, ta boucle peux bouffer une partie des ressources puisque tu vas tourner toutes les secondes... Quel est l'intérêt de tester sur la seconde? Ca fait une différence si ta lampe s'allume à 15h00'00 ou 15h00'13?....
ekperso Posté(e) le 16 mars 2019 Auteur Signaler Posté(e) le 16 mars 2019 C'est sur, mais j'ai modifié ça car je ne m'intérresse qu'à la valeur des heures, hors minutes et secondes, donc je boucle toutes les heures :-) Dernière version : local heure while true do heure = fibaro:getGlobal('startH') if(tonumber(os.date('%H')) == tonumber(heure)) then fibaro:call(259,"turnOn") end fibaro:sleep(3600*1000) end
Messages recommandés