Did Posté(e) le 7 janvier 2014 Signaler Partager Posté(e) le 7 janvier 2014 Bonjour, J'ai découvert une commande Lua "isdst" qui permet de savoir si nous sommes en heure d'été. On doit pouvoir stocker cette réponse "true" dans une variable Saison mais je ne sait pas si il y a une réponse "false" pour les mois d'hiver. Quelqu'un a une idée sur les lignes de commande Lua pour récupérer cette info dans le panneau des variables? Merci. 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krikroff Posté(e) le 7 janvier 2014 Signaler Partager Posté(e) le 7 janvier 2014 Pour cela il faut créer une variable global depuis le panneau variable (il y a un tuto pour cela sur le forum il me semble). Par exemple la variable saison. Puis utiliser la commande LUA fibaro:getGlobalValue("saison") pour lire la valeur ou bien fibaro:setGlobal("saison", true ou false) pour mettre à jour la variable global. Example: -- récupération d'une table Date local dt = os.date("*t"); -- création de la chaîne pour l'affichage local display = dt.hour..":"..dt.min..":"..dt.sec.." Heure d'été -> "..tostring(dt.isdst); -- Sortie de la variable vers la fenêtre debug du HC2 -- false pour hiver, true pour été fibaro:debug(display); -- mise à jour de la variable fibaro:setGlobal("saison", dt.isdst); Voilou ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 7 janvier 2014 Auteur Signaler Partager Posté(e) le 7 janvier 2014 Merci beaucoup Krikroff Par contre, la routine ne modifie pas la valeur: Quand je fais démarrer, cela m'affiche: [DEBUG] 13:46:40: 13:46:40 Heure d'été -> false [ERROR] 13:46:40: line :setGlobal (arg 3), expected 'string const &' got 'boolean' et la valeur de la variable saison ne change pas dans le panneau. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krikroff Posté(e) le 7 janvier 2014 Signaler Partager Posté(e) le 7 janvier 2014 avec plaisir, ok, il faut remplacer la ligne fibaro:setGlobal("saison", dt.isdst); par fibaro:setGlobal("saison", tostring(dt.isdst)); il demande un string et pas un boolean Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 7 janvier 2014 Auteur Signaler Partager Posté(e) le 7 janvier 2014 Bah oui, comment n'y ai-je pas pensé plus tôt? Je plaisante, je n'aurais jamais été capable de pondre ça et aussi rapidement. Merci encore. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krikroff Posté(e) le 7 janvier 2014 Signaler Partager Posté(e) le 7 janvier 2014 Après tu peux aller plus loin encore , avec une variable global "predefinie" par exemple: saison été/hiver et avec un code dans le genre if (dt.isdst) then fibaro:setGlobal("saison", "été"); else fibaro:setGlobal("saison","hiver"); end 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Domodial Posté(e) le 7 janvier 2014 Signaler Partager Posté(e) le 7 janvier 2014 Punaise je vais mettre ça en place 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 7 janvier 2014 Auteur Signaler Partager Posté(e) le 7 janvier 2014 Royale, et il n'y a pas besoin de mettre de pause pour économiser les ressources de la HC2 (comme elle n'est utilisée qu'une fois tous les six mois)? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krikroff Posté(e) le 8 janvier 2014 Signaler Partager Posté(e) le 8 janvier 2014 Oui, placer le code dans une scène qui s’exécute 1x par jour par exemple Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 8 janvier 2014 Auteur Signaler Partager Posté(e) le 8 janvier 2014 Je vais encore abuser de votre temps mais j'ai fait une scène avec les blocs et mis un timer basé sur un intervalle de 24 heures entre 4h00 et 4h02. Puis j'ai converti les blocs en Lua, et enfin ajouté le code ce qui me donne: --[[ %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "04", "00")) and tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "04", "02"))) and (math.floor(os.time()/60)-math.floor(1389063600/60))%1440 == 0 ) ) then end fibaro:sleep(60*1000); end else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other" ) then -- récupération table Date local dt = os.date("*t"); -- création de la chaîne pour affichage local display = dt.hour..":"..dt.min..":"..dt.sec.." Heure d'été -> "..tostring(dt.isdst); -- Sortie de la variable vers la fenêtre debug du HC2 -- false pour hiver, true pour été fibaro:debug(display); -- mise à jour de la variable fibaro:setGlobal("Saison", tostring(dt.isdst)); if (dt.isdst) then fibaro:setGlobal("Saison", "Eté"); else fibaro:setGlobal("Saison","Hiver"); end end end Ais-je bon? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shad Posté(e) le 8 janvier 2014 Signaler Partager Posté(e) le 8 janvier 2014 met les balises codes pour que ce soit plus lisibles et revoit ton incrementation . Ton code contient des erreurs il me semble: --[[ %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if (((tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "04", "00")) and tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "04", "02"))) and (math.floor(os.time()/60)-math.floor(1389063600/60))%1440 == 0 )) then end fibaro:sleep(60*1000); end else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other") then -- récupération table Date local dt = os.date("*t"); -- création de la chaîne pour affichage local display = dt.hour..":"..dt.min..":"..dt.sec.." Heure d'été -> "..tostring(dt.isdst); -- Sortie de la variable vers la fenêtre debug du HC2 -- false pour hiver, true pour été fibaro:debug(display); -- mise à jour de la variable fibaro:setGlobal("Saison", tostring(dt.isdst)); if (dt.isdst) then fibaro:setGlobal("Saison", "Eté"); else fibaro:setGlobal("Saison","Hiver"); end end end Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 8 janvier 2014 Auteur Signaler Partager Posté(e) le 8 janvier 2014 Bonjour Shad et merci, Comment met-on ce cadre et la numérotation des lignes qui rend plus clair l'apparence du message? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shad Posté(e) le 8 janvier 2014 Signaler Partager Posté(e) le 8 janvier 2014 Heu attend, j'avais pas vue que ton code venait d'un bloc graphique. Je comprend pas mal de choses pourquoi ton code est bizarre En fait si tu veux faire une scène ou tu clics pour exécuter la commande de krikroff car j'avoue ne pas comprendre la partie entre 4h00 et 4h02 du matin. Le plus simple est de faire simplement: --[[ %% properties %% globals --]] local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other") then -- création de la chaîne pour affichage local display = currentDate.hour..":"..currentDate.min..":"..currentDate.sec.." Heure d'été -> "..tostring(currentDate.isdst); -- Sortie de la variable vers la fenêtre debug du HC2 -- false pour hiver, true pour été fibaro:debug(display); -- mise à jour de la variable fibaro:setGlobal("Saison", tostring(currentDate.isdst)); if (currentDate.isdst) then fibaro:setGlobal("Saison", "Eté"); else fibaro:setGlobal("Saison","Hiver"); end end Tiens moi au courant si c'est bon. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 8 janvier 2014 Auteur Signaler Partager Posté(e) le 8 janvier 2014 C'est pour ajouter un déclenchement journalier de cette commande de Krikroff qui n'a pas besoin de tourner 24h/24 mais simplement une fois/jour à 4h pendant 2 min. (changement d'heure effectué à 3h). Après la valeur est stockée dans ma variable saison. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shad Posté(e) le 8 janvier 2014 Signaler Partager Posté(e) le 8 janvier 2014 Pourquoi laisser pendant 2 min?? La lancer une fois à 4h10 devrais suffire. De plus je te conseille pour un soucis de facilité de gestion d'utiliser le scheduler que j'ai mis ici. Tu verras quand tu commenceras à avoir plein de scène ce sera beaucoup mieux à gérer tout depuis le même endroit et tu peux suivre si tes scènes sont bien lancer. Et pour la création des scènes, c'est également simplifiez car tu as juste à mettre pour la lancer: --[[ %% properties %% globals --]] local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other") then ...... end Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 8 janvier 2014 Auteur Signaler Partager Posté(e) le 8 janvier 2014 La lancer une seule fois suffira en effet. J'ai mis en place le sheduler, Scene Restart Schedule dans des scènes et Alarm clock dans un périphérique virtuel mais là je suis encore plus perdu: en parcourant toutes les lignes, je vois qu'il y a des variables à ajouter dans le panneau mais je ne suis pas encore assez calé pour la mise en service et l'utilisation de sheduler. Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shad Posté(e) le 8 janvier 2014 Signaler Partager Posté(e) le 8 janvier 2014 Non c'est très simple Pose tes questions sur le fil, je t'aiderais. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 8 janvier 2014 Auteur Signaler Partager Posté(e) le 8 janvier 2014 Pour être sà»r ne de pas faire de bétises (corrige moi si je me trompe): 1 périphérique virtuel pour Réveil (j'ai pris celui d'I-magin en français) vérifier le nom des variables Dans ce périphérique virtuel, adapter le n°id de ce VD à la ligne: local alarmClockDevice de chaque bouton 1 scène pour Scene Restart Schedule Comment on la nomme? A quoi sert cette scène? compter le nombre de scènes qui tournent? tuer les scènes? 1 scène pour scheduler-1-3-0 Comment on la nomme? Planificateur? Dans la ligne 97: local restartScene = 67 correspond à quel Id? Dans la ligne 98: local alarmClocks = { alarmTime1 = {deviceID = 268, correspond à quel Id? idem pour la ligne 103 et le n°294? Quelles sont les variables à mettre en place et leur valeur? Merci pour ta patiente. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krikroff Posté(e) le 8 janvier 2014 Signaler Partager Posté(e) le 8 janvier 2014 Je comprends Shad dans sa démarche, mais j'aurais tendance à dire que le scheduler est à aborder avec un minimum d' aisance avec la prog LUA et pas forcement justifié au début d'une installation mais plus dans un second temps. Le code suivant fait une vérification tous les jours à 4:15, il n'est pas optimisé car juste passage du mode bloc à LUA mais bon ... --[[ %% autostart %% properties %% globals --]] function check() -- récupération table Date local dt = os.date("*t"); -- création de la chaîne pour affichage local display = dt.hour..":"..dt.min..":"..dt.sec.." Heure d'été -> "..tostring(dt.isdst); -- Sortie de la variable vers la fenêtre debug du HC2 -- false pour hiver, true pour été fibaro:debug(display); -- mise à jour de la variable if (dt.isdst) then fibaro:setGlobal("Saison", "Eté"); else fibaro:setGlobal("Saison","Hiver"); end end local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "04:15") )) then check(); end fibaro:sleep(60*1000); end else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if (startSource["type"] == "other") then check(); end end Bon courage. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 8 janvier 2014 Auteur Signaler Partager Posté(e) le 8 janvier 2014 Il ne manque pas entre les lignes 16 & 17 cette commande: fibaro:setGlobal("Saison", tostring(dt.isdst)); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krikroff Posté(e) le 8 janvier 2014 Signaler Partager Posté(e) le 8 janvier 2014 Alors: Si tu utilises une variable prédéfinie "Été" / "Hiver" il faut utiliser if (dt.isdst) then fibaro:setGlobal("Saison", "Eté"); else fibaro:setGlobal("Saison","Hiver"); end si c'est une variable "simple" il faut utiliser fibaro:setGlobal("Saison", tostring(dt.isdst)); mais pas les deux Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 8 janvier 2014 Auteur Signaler Partager Posté(e) le 8 janvier 2014 Ah d'accord. Merci à tous. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Rocketlud Posté(e) le 11 décembre 2014 Signaler Partager Posté(e) le 11 décembre 2014 Salut les gars, Je souhaiterais faire de même afin d'optimiser mes volets roulants lors du changement d'heure ou de saison;) Did tu pourrais me faire un ptit retour de ce que tu as fait Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 11 décembre 2014 Auteur Signaler Partager Posté(e) le 11 décembre 2014 Ouh la, c'est vieux ça... Mais ça, c'était avant. Depuis, Steven nous a pondu un truc de malade! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Rocketlud Posté(e) le 11 décembre 2014 Signaler Partager Posté(e) le 11 décembre 2014 C'est le fameux dst dans gea? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés