mprinfo Posté(e) le 11 mai 2020 Auteur Signaler Posté(e) le 11 mai 2020 C'est avec les vieux pot qu'on fait la meilleure soupe Je viens d'éteindre l'ordinateur car autrement je vais y passer la nuitEn plus demain réveil 6h00Je test ça demain en rentrant du travailMerci de votre aide@jjacques68 demain je te donnerai un exemple Envoyé de mon BLA-L29 en utilisant Tapatalk
TonyC Posté(e) le 11 mai 2020 Signaler Posté(e) le 11 mai 2020 ça m'a l'air de tourner, c'est bon pour toi, le résultat te semble ok? 1
jjacques68 Posté(e) le 11 mai 2020 Signaler Posté(e) le 11 mai 2020 aaaaah c'est frustrant d'être sur la touche !! vous me laissez sur ma faim là... hop à demain moi aussi dodo...
TonyC Posté(e) le 11 mai 2020 Signaler Posté(e) le 11 mai 2020 (modifié) il y a 16 minutes, jjacques68 a dit : mais il est où le problème ? un tostring dans le fibaro.setGlobalVariable(NomVG, tostring(Valeurs)) et un trigger= sourceTrigger non déclaré dans le code mais peut être un bout qui manquait. output de la console : [11.05.2020] [22:23:09] [DEBUG] [SCENE223]: lever : 06:17 [11.05.2020] [22:23:09] [DEBUG] [SCENE223]: Coucher : 21:24 [11.05.2020] [22:23:09] [DEBUG] [LA BOX A DÉMARRÉ LE 11/05/2020 A 22:23] [11.05.2020] [22:23:09] [DEBUG] [SCENE13]: ok [11.05.2020] [22:23:09] [DEBUG] [SCENE13]: ok [11.05.2020] [22:23:09] [DEBUG] [SCENE13]: ok [11.05.2020] [22:23:09] [DEBUG] [SCENE223]: Jour_Nuit 22:23 [11.05.2020] [22:23:09] [DEBUG] [FUNCTION UPDATEJOURNUIT] [11.05.2020] [22:23:09] [DEBUG] [LEVER SOLEIL : 06:17 - COUCHER SOLEIL : 21:24] [11.05.2020] [22:23:09] [DEBUG] [BOUCLE PRINCIPALE] [11.05.2020] [22:23:09] [DEBUG] [BOUCLE PRINCIPALE 1] [11.05.2020] [22:23:09] [DEBUG] [VALEUR DU SLEEP 1 MN] [11.05.2020] [22:24:09] [DEBUG] [BOUCLE PRINCIPALE 1] [11.05.2020] [22:24:09] [DEBUG] [VALEUR DU SLEEP 1 MN] [11.05.2020] [22:25:09] [DEBUG] [BOUCLE PRINCIPALE 1] [11.05.2020] [22:25:09] [DEBUG] [VALEUR DU SLEEP 1 MN] [11.05.2020] [22:26:09] [DEBUG] [BOUCLE PRINCIPALE 1] [11.05.2020] [22:26:09] [DEBUG] [VALEUR DU SLEEP 30 MN] Mais impossible d'arrêter le code le while doit le faire partir en sucette ... Modifié le 11 mai 2020 par TonyC
mprinfo Posté(e) le 11 mai 2020 Auteur Signaler Posté(e) le 11 mai 2020 je viens de rallumer l'ordi oui plus d'herreur par contre je vois rien dans le debug fibaro.debug("boucle principale") while true do fibaro.debug("boucle principale 1") fibaro.debug(string.format("Valeur du Sleep %s mn",j)) c'est pas normal
TonyC Posté(e) le 11 mai 2020 Signaler Posté(e) le 11 mai 2020 (modifié) ça doit faire quoi ? Bon on verra la suite plus tard car l'heure du dodo sonne pour les vieux EDIT: Si tu as la HC2 tu pourrais faire un print de son debug? histoire de m'aider à comprendre ce que ce bout doit sortir? Modifié le 11 mai 2020 par TonyC
mprinfo Posté(e) le 11 mai 2020 Auteur Signaler Posté(e) le 11 mai 2020 tu devrais le voir dans le debug cela a tenu 5 mn et box planté
TonyC Posté(e) le 11 mai 2020 Signaler Posté(e) le 11 mai 2020 (modifié) idem vient de crasher la box mais je pige pas trop ce que ça doit faire au bout du bout, plus chercher l'erreur qu'a piger ce que doit faire ce code. Mais on ne baisse pas les bras ça progresse EDIT: Si on stop la scène la box finie par redonner la main. Mais un print du debug de la hc2 aiderait vraiment si tu as ça en stock histoire de voire les valeurs que ça doit retourner. dans les variables j'ai : et Modifié le 11 mai 2020 par TonyC
mprinfo Posté(e) le 11 mai 2020 Auteur Signaler Posté(e) le 11 mai 2020 oui t’inquiéte je lâche pas comme cela voici l'explication c'est vieux j'avais fais le code et @steven me corrigé Attention c'est dangereux le do while true a utilisé que si on maitrise car c'est une boucle infini
Krikroff Posté(e) le 11 mai 2020 Signaler Posté(e) le 11 mai 2020 Lol Fibaro bloque des choses essentiels pour coder intelligemment alors qu’un while est le plus dévastateur pour le support Envoyé de mon iPhone en utilisant Tapatalk 1
TonyC Posté(e) le 11 mai 2020 Signaler Posté(e) le 11 mai 2020 je ne l'utilise jamais, pas de while et plus de sleep , enfin presque plus de sleep en fait j'en ai encore un ou deux qui traine par ci par là
jjacques68 Posté(e) le 12 mai 2020 Signaler Posté(e) le 12 mai 2020 (modifié) oui, j'ai eu de très mauvaises expérience avec les while true do... vaut mieux utiliser les setTimeout... et je veux pas être lourd... mais quand on utilise le commande fibaro.debug() dans une scène, il faut saisir 2 arguments minimum : Le premier est le "tag" de la scène... fibaro.debug("Le_nom_de_la_scène_ou_autre", blablabla) Modifié le 12 mai 2020 par jjacques68 1
mprinfo Posté(e) le 12 mai 2020 Auteur Signaler Posté(e) le 12 mai 2020 Lol Fibaro bloque des choses essentiels pour coder intelligemment alors qu’un while est le plus dévastateur pour le support Envoyé de mon iPhone en utilisant TapatalkPunaise c'est nul celaÇa fait des années qu'elle tourne sur hc2 sans soucisAprès comme déjà c'est dangereux cette boucleSur hc2 j'ai seulement 2 scènes comme cela Après il y a plus simple fibaro à du piquer mon idée ça maintenant on peut faire cela avec les déclencheurs sunset est sunrise Envoyé de mon BLA-L29 en utilisant Tapatalk
mprinfo Posté(e) le 12 mai 2020 Auteur Signaler Posté(e) le 12 mai 2020 C'est bon elle tourne impeccable @krikroff toi tu te rappelles de la bonne époque ou il n'y avait de de setTimeout() ou un gros slips de plus de 30mn avait de forte chance de faire planter la box ben cette scène elle date de cette époque voici le code a priori fonctionnel après avec la HC3 on peut dire que c'est plutôt obsolète comme scène -- Nom des Variables Globales local VGJourNuit = "Jour_Nuit" local VGLeverSoleil = "SoleilLever" local VGCoucherSoleil = "SoleilCoucher" -- Minutes de décalages par rapport au lever du soleil local TLever = {-60, -45, -30, -20, -10, 10, 20, 30} -- Minutes de décalages par rapport au Coucher du soleil local TCoucher = {-109, -30, -20, -10, 10, 20, 30, 45, 60} local tag ="Scene21" -- Id du téléphone --local IdTel = fibaro:getGlobal("TelPascal") --************ Ne rien modifier en dessous de cette ligne ************ ---------------------------------------------------------------------- -- Envoi d'un Push pour avertir que le box à démarrer ou redémarrer -- ---------------------------------------------------------------------- function EnvoiPush(Message) fibaro.trace(tag, Message) --fibaro:call(IdTel, "sendPush", Message) end -- ----------------------------------------------------------------- -- Vérification Variable Globale et création si besoin -- -- ----------------------------------------------------------------- function VerifVG(nom, valeur, enumValeur, lecture) if (fibaro.getGlobalVariable(nom) == "") then -- Test si la variable existe local data = { name = nom, value = valeur, readOnly = false, isEnum = false } -------------------------------------------------------------- -- si lecture = oui alors la variable sera en lecture seule -------------------------------------------------------------- if lecture == "read" then data.readOnly = true end -------------------------------------------------------------- -- si la variable est une variable enumeree -------------------------------------------------------------- if (type(enumValeur) ~= "nil") then data.value = enumValeur[1] data.isEnum = true data.enumValues = enumValeur end -------------------------------------------------------------- -- creation de la variable a partir de la table "data" ------------------------------------------------------------- --fibaro.debug(tag, (json.encode(data))) api.post("/globalVariables/", data) fibaro.debug(tag, "la variable : ", nom, "a ete cree") end end ---------------------------------------------------------------------- -- Mise a jour d une variable global -- ---------------------------------------------------------------------- function UpdateVG(NomVG, Valeurs) if (fibaro.getGlobalVariable(NomVG) == nil) then UpdateVG(NomVG, Valeurs) end fibaro.trace(tag, "Mise a jour de la Variable Globale : "..NomVG.." = "..Valeurs) fibaro.setGlobalVariable(NomVG, tostring(Valeurs)) end ---------------------------------------------------------------------- -- Vérification de l heure et mise à jour -- -- de la variable si nécessaire -- ---------------------------------------------------------------------- function UpdateJourNuit(NomVG, heure) local valeurs = "Nuit" -- test si on est le jour ou la nuit if (heure >= leverSoleil) and (heure < coucherSoleil) then valeurs = "Jour" end fibaro.trace(tag, string.format("Lever Soleil : %s - Coucher Soleil : %s", leverSoleil, coucherSoleil)) UpdateVG(NomVG, valeurs) -- mise a jour de la VG Jour_Nuit end ---------------------------------------------------------------------- -- Compare les tables Lever et coucher du soleil -- -- avec sunrisehour et sunsethour -- ---------------------------------------------------------------------- function LeverCoucher(NomVG, TableNom, SunRiseSet, JourNuit) for index, v in ipairs(TableNom) do if (os.date("%H:%M", os.time()+v*-60)) == SunRiseSet then UpdateVG(NomVG, v) if v == 0 then --fibaro.debug(tag, "il fait : "..JourNuit) UpdateVG(VGJourNuit, JourNuit) end end end end ---------------------------------------------------------------------- -- Conversion Date format texte en format Date -- ---------------------------------------------------------------------- function ConvertionDate(NomDate) -- on extrait l'heure et minute (%d+) est un digit local heure, minute = string.match(NomDate, "(%d+):(%d+)") -- On récupère l'heure et date actuelle sous forme de tableau local TableDate = os.date("*t") -- On modifie l'heure et les minutes TableDate.hour = heure TableDate.min = minute -- Nous pouvons maintenant exploiter "MonHeure" comme une vrai date local MonHeure = os.time(TableDate) return (MonHeure) end ---------------------------------------------------------------------------- -- Calcul la valeur du Sleep en fonction des Max et Mini -- -- des Tables Lever et Coucher -- ---------------------------------------------------------------------------- function calculPause(j, heure, minilever, maxilever, minicoucher, maxicoucher) --fibaro.debug(tag, "Heure Actuelle : "..heure) -- mini et max lever local heurelever = ConvertionDate(leverSoleil) local heureleverMini = (os.date("%X", heurelever+(minilever*60))) local heureleverMaxi = (os.date("%X", heurelever+(maxilever*60))) --fibaro.debug(tag, "heure Lever Soleil Mini : "..heureleverMini.." - Maxi : "..heureleverMaxi) -- mini et max coucher local heurecoucher = ConvertionDate(coucherSoleil) local heurecoucherMini = (os.date("%X", heurecoucher+(minicoucher*60))) local heurecoucherMaxi = (os.date("%X", heurecoucher+(maxicoucher*60))) --fibaro.debug(tag, "heure Coucher Soleil Mini : "..heurecoucherMini.." - Maxi : "..heurecoucherMaxi) if heure >= heureleverMini and heure < heureleverMaxi or heure >= heurecoucherMini and heure < heurecoucherMaxi then j=1 end return (j) end -- =================================================================== -- == Nous avons fini la préparation de notre code == -- == Nous pouvont Exécuter le programme == -- == Script réaliser par MPRINFO Version 5.00B == -- == Grand Merci à STEVEN pour son aide == -- =================================================================== ---------------------------------------------------------------------- -- Envoi d'un Push pour donner la date et l'heure de démarrage -- ---------------------------------------------------------------------- EnvoiPush(string.format("La box a démarré le %s a %s", os.date("%d/%m/%Y"), os.date("%R"))) ---------------------------------------------------------------------- -- Versification si les variables globales existe -- -- et Création ou Modification si Besoin -- ---------------------------------------------------------------------- VerifVG(VGJourNuit, "Jour", {"Jour", "Nuit"}) VerifVG(VGLeverSoleil, "0") VerifVG(VGCoucherSoleil, "0") ---------------------------------------------------------------------- -- Mise a jour de la variable VG Jour_Nuit au Démarrage de la Box -- -- Ou lors de la sauvegarde de la scène -- ---------------------------------------------------------------------- leverSoleil = fibaro.getValue(1, "sunriseHour") coucherSoleil = fibaro.getValue(1, "sunsetHour") UpdateJourNuit (VGJourNuit, os.date("%H:%M", os.time())) --------------------------------------------------------------------- -- Trie des Tables et récupération des valeurs min et maximum -- --------------------------------------------------------------------- -- Traitement de la Table TLever table.insert(TLever, 1, 0) -- ajout de 0 mn dans la table table.sort(TLever) local MiniLever = ((TLever[1]-30)) local MaxiLever = ((TLever[#TLever]+1)) -- Traitement de la Table TChoucher table.insert(TCoucher, 1, 0) -- ajout de 0 mn dans la table table.sort(TCoucher) local MiniCoucher = ((TCoucher[1]-30)) local MaxiCoucher = ((TCoucher[#TCoucher]+1)) ---------------------------------------------------------- --- Boucle loop ---------------------------------------------------------- function loop(refresh) local j = 30 local osHeure = os.date("%H:%M", os.time()) leverSoleil = fibaro.getValue(1, "sunriseHour") coucherSoleil = fibaro.getValue(1, "sunsetHour") LeverCoucher(VGLeverSoleil, TLever, leverSoleil, "Jour") LeverCoucher(VGCoucherSoleil, TCoucher, coucherSoleil, "Nuit") j = calculPause(j, osHeure, MiniLever, MaxiLever, MiniCoucher, MaxiCoucher) --fibaro.debug(tag, string.format("Valeur du Sleep %s mn",j)) -- Pause en fonction de la valeur de j -- fibaro.debug(tag, "Valeur de la pause : "..j) fibaro.setTimeout(j*60*1000, function() loop(j) end) end -- Boucle principale local j = 0 loop(j) 1
mprinfo Posté(e) le 15 mai 2020 Auteur Signaler Posté(e) le 15 mai 2020 j'ai plusieurs petite question dans un QA c'est quoi la différence entre self.variable et variable c'est un méthode pour déclarer la variable en globale ? Si je créé un QA en Generic device on change l'icone comment ? car le je vois pas comment faire @krikroff j'ai une question sur les function peut on les mètrent dans scème est les appelés avec un QA ou une scène est récupérer la ou les valeurs ensuite je faisais comme cela sous dbases4 cela évite de répéter les fonctions merci pour vos réponse
jjacques68 Posté(e) le 15 mai 2020 Signaler Posté(e) le 15 mai 2020 (modifié) pour l'icône pas encore. pour l'appel de fonction dans les scènes : fibaro.call(ID_QA,"Ma_Fonction") pour la récupération de valeur de retour, on en a déjà discuté, pas encore... du moins pas sans usine à gaz... en attendant passer par une VG de retour, peut aider pour l'usine à gaz : (suis pas fan, jamais essayé) https://forum.fibaro.com/topic/49113-hc3-quickapps-coding-tips-and-tricks/?tab=comments#comment-201165 pour la variable, j'ai aussi remarqué que ça pouvait marché sans le "self." Après comme le QA est une "mini" classe, c'est presque de la POO... si j'ose dire... donc c'est plus "propre"... n'hésitez pas à me corriger !! Modifié le 15 mai 2020 par jjacques68 1
mprinfo Posté(e) le 15 mai 2020 Auteur Signaler Posté(e) le 15 mai 2020 @jjacques68 merci pour toutes ces précisions dommage que l'on ne puise pas récupère la valeur des fonctions ça serait top
jjacques68 Posté(e) le 15 mai 2020 Signaler Posté(e) le 15 mai 2020 c'est dans les tuyaux d'après @Krikroff. du moins il a fait remonté l'info...
jjacques68 Posté(e) le 15 mai 2020 Signaler Posté(e) le 15 mai 2020 ce serait le rêve, imagines un QA avec toutes les petites fonctions dedans, que tu peux appeler quand tu veux, et récupérer le retour directement. ben en gros tout le contenu du "snippet" sur le forum que tu as créé
mprinfo Posté(e) le 15 mai 2020 Auteur Signaler Posté(e) le 15 mai 2020 @jjacques je pensais exactement la même choses 1
Messages recommandés