jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 l'essentiel c'est qu'il doit comparer des jours avec des jours, ou des secondes avec des secondes. Normalement j'imagine que ça passera. Surtout pas des jours avec des secondes ! 1
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 (modifié) ça avance, encore merci, pcq j'etais bien bloqué la scene de depart qui signale la derniere pluie: --[[ %% autostart %% properties %% globals pluie_dans_lheure --]] if (fibaro:countScenes() > 1) then fibaro:abort() end local mavariable1 mavariable1 = fibaro:getGlobalValue('pluie_dans_lheure') local startedAt = os.time() local startSource = fibaro:getSourceTrigger() function getActuatorStatus(id) return (tonumber(fibaro:getGlobalValue("pluie_dans_lheure")) ~= 1) end if (startSource["type"]~="autostart") then local date = os.date("%d/%m/%Y %H:%M:%S", os.time()) -- check actuator status and count only when turned on if (getActuatorStatus(mavariable1)) then fibaro:debug("il ne pleut plus depuis <font color=\"green\">"..date.."</font>") fibaro:setGlobal('time_last_rain', os.time()) --on enregistre la date et l'heure de la fin de derniere pluie else fibaro:debug("il pleut depuis <font color=\"red\">"..date.."</font>") end end dans le bp MJ du VD: (finalement j'ai placé le code dans le BP MJ toutes les minutes) il actualise les labels et variables local date_derniere_pluie = tonumber(fibaro:getGlobalValue("time_last_rain")) local ma_date_en_toute_lettre = os.date("%d/%m/%Y - %H:%M:%S",date_derniere_pluie) fibaro:debug(ma_date_en_toute_lettre) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.LastRain.value", ma_date_en_toute_lettre) -------------------------- -- on mesure la difference entre 2 dates print ("date derniere pluie") local date_derniere_pluie = tonumber(fibaro:getGlobalValue("time_last_rain")) fibaro:debug(os.date("%d/%m/%Y - %H:%M:%S",date_derniere_pluie)) print ("date actuelle") local date_actuelle = os.time() fibaro:debug(os.date("%d/%m/%Y - %H:%M:%S",date_actuelle)) print ("diff_des_2_dates") local diff_des_2_dates = os.difftime (date_actuelle, date_derniere_pluie) fibaro:debug(diff_des_2_dates/(24*60*60).." jour(s)") local difference_jr = diff_des_2_dates/(24*60*60) fibaro:setGlobal('difference_jr', difference_jr) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lbtpsecoule.value", diff_des_2_dates /(24*60*60).." jour(s)") mon GEA: j'ai un doute, mais on verra EDIT: j'ai une erreur sur la variable diiference_jr (en jour soit maintenant à 0,229.....) et la consigne qui est égale à 3 (en jours) le but etant de dire: si la différence en tps est > à la consigne alors ...... --"difference_jr" = variable contenant l'ecart entre heure actu et heure derniere pluie en jour -- "Consigne_Tps_Arros = WArrosage_J_avant" en jour au lieu de seconde, variable qui contient un nombre (exemple 3) qui sera le nombre de jour apres lequel on pourra declencher l'arrosage GEA.add({{"Global+" , "difference_jr", "Consigne_Tps_Arros"},{"Global","pluie_dans_lheure","0"},{"Global-" , "HumidExt", "60"},{"Global","Saison","Printemps"},{"Days", "Weekday"},{"Time", "Sunset+1"}},-1 , "cela fait {global, difference_jr}jours qu'il n'a pas plu, humidite {global, HumidExt}%, allumer arrosage") [DEBUG] 15:39:50: Démarrage par évenement de GEA 6.12 (mode global [difference_jr]) [DEBUG] 15:39:50: -------------------------------------------------------------------------------- [DEBUG] 15:39:50: 2020-04-17 15:39:50.661959 [ fatal] Unknown exception: /opt/fibaro/scenes/348.lua:1556: attempt to compare nil with number [DEBUG] 15:40:08: ... vérification en cours #1 @30s... et une capture du VD avec la différence de temps entre la consigne et la dernière pluie, j'avoue que les xxxxxxxxx après la virgule, ce n'est pas jolie et je m'en passerai bien Modifié le 17 avril 2020 par flamalex
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 je regarde plus en détail plus tard, mais à première vu tu n'as pas les multiples de 24*60*60 ??? relis voir les post plus haut...
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 si si, ils y sont ils sont dans les BP + et - du VD, ça c'est bon mais dans GEA je compare bien mes 3 jrs de consigne (qui ont ete convertis en seconde precedement, sauf qu'ici il faut qu'ils soient en jour, donc on a bien 3 jours) avec les secondes de difference que j'ai passé en jour (d'ou les 0,23.....) donc je lui dis, si 0,23 est > à 3jrs alors la condition est OK ...
mprinfo Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 Il y a 5 heures, jjacques68 a dit : l'essentiel c'est qu'il doit comparer des jours avec des jours, ou des secondes avec des secondes. Normalement j'imagine que ça passera. Surtout pas des jours avec des secondes ! non c'est pas comme cela que ca ce passe ca compare juste des seconds nombre de secondes écoulées depuis 01/01/1970 00:00:00 https://fr.wikipedia.org/wiki/Heure_Unix
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 la comparaison fonctionne, tt est ok maintenant, j'ai 2 variables dans lesquelles j'importe "difference_jr" une valeure qui va varier de 0 à 3 dans cette exemple, en passant par des 0,3 _ 1,2 _ 2,4 ....... jusqu'a 3 puis "consigne_Tps_arros" qui contient une valeur de 0 à 3, de nombres entiers 1, 2 ou 3 donc sans parler de date, d'heure, ça c'est bon, en GEA comment comparer ces 2 valeurs contenues dans ces 2 variables {"Global+", 0,23 , 3} en temps normal, on compare la variable à une valeur exemple: {"Global+, "variable", 60} = si la valeur de la variable est supérieur à 60 alors ...... moi ici, j'ai essayé ceci, mais j'ai une erreur (debug plus haut) {"Global+" , "difference_jr", "Consigne_Tps_Arros"}
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 ah la la, dans GEA je sais pas...
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 et en LUA, si la valeur difference_jr est > consigne_tps_arros alors on passe un variable à 0 j'ai essayé ceci mais lui demander de voir si 0,3 > 2 alors variable à 1, il ne sait pas ça devient une usine à gaz local date_derniere_pluie = tonumber(fibaro:getGlobalValue("time_last_rain")) local ma_date_en_toute_lettre = os.date("%d/%m/%Y - %H:%M:%S",date_derniere_pluie) fibaro:debug(ma_date_en_toute_lettre) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.LastRain.value", ma_date_en_toute_lettre) -------------------------- -- on mesure la difference entre 2 dates print ("date derniere pluie") local date_derniere_pluie = tonumber(fibaro:getGlobalValue("time_last_rain")) fibaro:debug(os.date("%d/%m/%Y - %H:%M:%S",date_derniere_pluie)) print ("date actuelle") local date_actuelle = os.time() fibaro:debug(os.date("%d/%m/%Y - %H:%M:%S",date_actuelle)) print ("diff_des_2_dates") local diff_des_2_dates = os.difftime (date_actuelle, date_derniere_pluie) fibaro:debug(diff_des_2_dates/(24*60*60).." jour(s)") local difference_jr = diff_des_2_dates/(24*60*60) fibaro:setGlobal('difference_jr', difference_jr) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lbtpsecoule.value", diff_des_2_dates /(24*60*60).." jour(s)") difference_jr= fibaro:getGlobal("difference_jr"); fibaro:debug(difference_jr) Consigne_Tps_Arros= fibaro:getGlobal("Consigne_Tps_Arros"); fibaro:debug(Consigne_Tps_Arros) if ((fibaro:getValue(difference_jr, "value")) > (fibaro:getValue(Consigne_Tps_Arros, "value")) ) then fibaro:setGlobal('OK_FOR_ARROZ', 1) else fibaro:setGlobal('OK_FOR_ARROZ', 0) end
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 tu es sûr dans GEA du contenu des variables ? on dirait que l'une des 2 d'après le debug est = null "difference_jr", "Consigne_Tps_Arros"
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 oui à l'heure ou ns echangeons, difference_jr est à 0,38 donc peut etre que pour lui c'est nul consigne_tps_arros est à 2
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 ça ça me dérange : il y a 2 minutes, flamalex a dit : if ((fibaro:getValue(difference_jr, "value")) > (fibaro:getValue(Consigne_Tps_Arros, "value")) ) ce serait plutôt : il s'agit bien de Variables Globales ? if tonumber(fibaro:getGlobalValue(difference_jr)) > tonumber(fibaro:getGlobalValue(Consigne_Tps_Arros))
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 pareil, je sais pas si ça a de l'importance, mais : then fibaro:setGlobal('OK_FOR_ARROZ', 1) else fibaro:setGlobal('OK_FOR_ARROZ', 0) end plutot ça : then fibaro:setGlobalValue('OK_FOR_ARROZ', 1) else fibaro:setGlobalValue('OK_FOR_ARROZ', 0) end
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 pour faire propre : if tonumber(fibaro:getGlobalValue(difference_jr)) > tonumber(fibaro:getGlobalValue(Consigne_Tps_Arros)) then fibaro:setGlobalValue('OK_FOR_ARROZ', 1) else fibaro:setGlobalValue('OK_FOR_ARROZ', 0) end
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 il y a 1 minute, jjacques68 a dit : pour faire propre : if tonumber(fibaro:getGlobalValue(difference_jr)) > tonumber(fibaro:getGlobalValue(Consigne_Tps_Arros)) then fibaro:setGlobalValue('OK_FOR_ARROZ', 1) else fibaro:setGlobalValue('OK_FOR_ARROZ', 0) end il me retourne [DEBUG] 19:04:51: 0.38699074074074 [DEBUG] 19:04:51: 2 [ERROR] 19:04:51: line 32: attempt to compare two nil values ligne 32 if tonumber(fibaro:getGlobalValue(difference_jr)) > tonumber(fibaro:getGlobalValue(Consigne_Tps_Arros)) then
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 (modifié) difference_jr= fibaro:getGlobal("difference_jr"); fibaro:debug(difference_jr) -- ici j'ai mon 0,38 Consigne_Tps_Arros= fibaro:getGlobal("Consigne_Tps_Arros"); fibaro:debug(Consigne_Tps_Arros) -- ici le 2 if tonumber(fibaro:getGlobalValue(difference_jr)) > tonumber(fibaro:getGlobalValue(Consigne_Tps_Arros)) then fibaro:setGlobalValue('OK_FOR_ARROZ', 1) else fibaro:setGlobalValue('OK_FOR_ARROZ', 0) end Modifié le 17 avril 2020 par flamalex
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 pardon, il faut encadrer le nom des variables avec les " "...
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 encore plus simple : if tonumber(difference_jr) > tonumber(Consigne_Tps_Arros) then vu que tu les as mises dans des variables locales.
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 ok, truc de fou, maintenant j'ai un probleme sur la 35 fibaro:setGlobalValue('OK_FOR_ARROZ', 0) [ERROR] 19:09:46: line 35: attempt to call method 'setGlobalValue' (a nil value)
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 oh punaise, c'est bien setGlobal et pas setGlobalValue ! je m'embrouille tout seul... 1
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 il y a 1 minute, jjacques68 a dit : encore plus simple : if tonumber(difference_jr) > tonumber(Consigne_Tps_Arros) then vu que tu les as mises dans des variables locales. j'ai essayé avec tonumber tte à l'heure, mais error, probablement à cause de mon manque d'experience avec les parenthésés
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 il y a 2 minutes, jjacques68 a dit : encore plus simple : if tonumber(difference_jr) > tonumber(Consigne_Tps_Arros) then vu que tu les as mises dans des variables locales. je pourrai alléger, en faisant l'inverse, je vire les locales et je laisse code précedent pcq la c'est une usine
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 tu as changer les setGlobalValue en setGlobal ?
jjacques68 Posté(e) le 17 avril 2020 Signaler Posté(e) le 17 avril 2020 c'est un peu l'usine à gaz oui, j'avoue ne pas tout saisir, je prends ce que tu me donnes en passant l'essentiel est de faire marcher comme tu veux. après on pourra rendre le code plus propre
flamalex Posté(e) le 17 avril 2020 Auteur Signaler Posté(e) le 17 avril 2020 (modifié) c'est bon, ça fonctionne nikel, j'ai ajouté un label pour visualiser le "OK" "pas OK" pour arrosage du coup le GEA est plus simple -- OK_FOR_ARROZ, variable du VD arrosage qui passe à 1 lorsque la consigne en temps est atteinte GEA.add({{"Global" , "OK_FOR_ARROZ", "1"},{"Global","pluie_dans_lheure","0"},{"Global-" , "HumidExt", "60"},{"Global","Saison","Printemps"},{"Days", "Weekday"},{"Time", "Sunset+1"}},-1 , "cela fait {global, difference_jr}jours qu'il n'a pas plu, humidite {global, HumidExt}%, allumer arrosage") Modifié le 18 avril 2020 par flamalex 1
Messages recommandés