-
Compteur de contenus
3 709 -
Inscription
-
Dernière visite
-
Jours gagnés
18
Tout ce qui a été posté par Sakkhho
-
Comme il pleut on sera fixé demain si ca passe comme il faut ;-)
-
oui tu as pas tort, 0h06 c'est peut etre un peu court :-) le debug de cette nuit donne : [DEBUG] 15:41:43: 1- Valeur J : 0 [DEBUG] 15:41:43: 2- Valeur J-1 : 0 [DEBUG] 15:41:43: 3- Valeur J-2 : 0.0 [DEBUG] 15:41:43: 4- Valeur J-3 : 0.0 [DEBUG] 15:41:43: 5- Valeur J-4 : 5.3 [DEBUG] 15:41:43: 6- Valeur J-5 : 0.0 [DEBUG] 15:41:43: 7- Valeur J-6 : 0.0 [DEBUG] 15:41:43: 8- Valeur J-7 : 0.0 [DEBUG] 15:41:43: 9- Valeur J-8 : 0.0 [DEBUG] 15:41:43: 10- Valeur J-9 : 0.0 [DEBUG] 15:41:43: 11- Valeur J-11 : 0.3 [DEBUG] 15:41:43: 12- Valeur J+2 : 5 [DEBUG] 15:41:43: 13- Valeur Arrosage à faire : 0 [DEBUG] 15:41:43: 14- Date dernier Arrosage : jamais [DEBUG] 15:41:43: 15- Date dernier Traitement data : 20150517 A suivre demain :-)
-
Cool, tu as testé la V2 ?
-
Hello Voilà une V2.0 - elle permet de tenir compte de l'arrosage et donc de rajouter une quantité en "mm" au data de précipitations. (vous pouvez modifier la valeurs dans les boutons LONG et COURT De plus on fait un long appel à l'API WU une seule fois. Ensuite on traite les données via une table. Donc tout ce qui est vrai pour la 1.5 reste valable (création clé API WU - Variable Arrosage à créer - Icône etc... (voir post 1) en plus il faut créer une variable "Precipitations" pour stocker la table - (pas une variable prédéfinie) - mettre 0 comme valeur; ensuite au 1er lancement il faut cliquer sur "Initialiser" (attention 10 appel API) attendez à minima 1mn et cliquer sur Rafraîchir pour avoir les données jours et previsions. Chaque nuit sur il faut appuyer sur "Traitement"pour traiter les datas. je vous propose GEA -- Arrosage GEA.add(true, 10*60, "", {{"VirtualDevice", id["CALCUL_ARROSAGE"], 2},{"Repeat"}}) -- Rafraichir les données pluie Jour Et Previsions GEA.add(true, 30, "", {{"Time", "00:06", "00:07"},{"VirtualDevice", id["CALCUL_ARROSAGE"], 14}}) -- Traitement de l'Historique Pluie ou pour le main loop pour ceux qui n'ont pas GEA ca doit être qq chose comme while true do local Var_Heure = os.date("%H:%M") local Var_Min = os.date("%M") --fibaro:debug("heure OS : " ..Var_Heure) if Var_Heure == "00:06" then fibaro:call(fibaro:getSelfId(), "pressButton", "14") fibaro:debug("heure OS : " ..Var_Heure .."Traitement des données effectué") end if Var_Min =="00" or Var_Min == "15" or Var_Min == "30" or Var_Min == "45" then fibaro:call(fibaro:getSelfId(), "pressButton", "2") fibaro:debug("heure OS : " ..Var_Heure .."Rafraichissement des données") end fibaro:sleep(60*1000) -- sleep 1 min end l'appui sur long ou court engendra l'ajout de 10 ou 20mm le lendemain de l'arrosage via la bouton Traitement et le label 'Arrosé le' prendra la date du dernier arrosage. je veux bien un beta testeur ;-) d'ailleurs qui peut me dire comment verifier la table via un fibaro:debug(print(Precipitations)) ca marche pas. merci edit : V2.1 un peu plus commentée Calcul_Arrosage V2.1.vfib
-
honnêtement je préfère séparer les choses, enfin c'est mon besoin. il est nécessaire je pense de rafraichir régulièrement la data HEURE et la data JOUR --> 1 bouton de meme pour la data prevision --> 1 bouton ou mieux comme la fréquence peut être la meme on rassemble tout dans 1 bouton : "Temps Réel" qui fait 2 requêtes API à la fois * 6/h * 24h = 288 /jour Ensuite j'ai un bouton "Historique" qui fait le boulot tot le matin pour basculer l'historique d'1 jour et qui récupère la data HIER : 1 requête API/jour Ensuite pour l'arrosage, comme tout il faut que cela soit semi automatique :-) donc je pense créer un bouton Long et un bouton Court Le click sur ce bouton fera local QuantiteLong = 20 local selfId = fibaro:getSelfId() local precipitation = json.decode(fibaro:getGlobalValue("Precipitations")) precipitation[12] = QuantiteLong fibaro:setGlobal("Precipitations", json.encode(precipitation)) fibaro:debug("" .. precipitation[12] .." mm d'arrosage effectué") GEA s'occupera de tout, c'est à dire si le calcul arrosage dit LONG ou COURT, alors GEA enclenche l'electrovanne le soir ou dans la nuit (c'est mieux pour l'arrosage :-)) pendant x minutes, et appuie sur le bouton LONG ou COURT, et passe la Variable Arrosage à NON. en + un bouton initialiser qui fait 10 appel est je pense aussi nécessaire. J'ai donc 5 boutons - Temps Réel - Historique / Initialiser - Court / Long
-
Topic unique Impérihome Et Hc2
Sakkhho a répondu à un(e) sujet de Moicphil dans Multimédia (audio, vidéo ...)
Super. Je suis impatient de voir ce que cette appli peut faire par rapport àl iPad origine fibaro Et espère ne pas être déçu. -
avant de tenter de coder cette nouvelle version, j'aimerai voir avec vous (enfin surtout jojo, mon partenaire sur ce VD :-)) si la logique est bonne 1 Je conserve la requête HEURE et JOUR (1 seul requête API) pour avoir quelque chose en temps reel (enfin toutes les 10mn) Pour le reste 2 il faut initialiser le module pour allez chercher les 10 derniers jours ; est ce que je garde un bouton d'appel 10days (INITIALISER) ou alors dans le code du bouton (voir si après je trouve un moyen de dire, uniquement si la table est vide alors lance la requête 10jours - le problème que je vois ici c'est que si pour une raison la table est corrompu on peut pas réinitialiser) 3 Tous les matin à 2h par exemple, on bascule dans la table je J+1 vers J+2, J+3 vers J+3 etc... et on lance un requête HIER pour avoir J+1 --> 1 appel API 4 On conserve le bouton Previsions --> 1 appel API on se retrouve donc avec 3 appel (sauf pour initialiser) donc super large. on pourrait meme encore optimiser et basculer J vers J+1 mais bon pas nécessaire je pense et plus simple pour la suite ;-) ensuite et c'est la que je sais pas trop comment faire j'aimerai tenir compte comme decrit plus haut de mm d'eau issue de l'arrosage. peut faire comme cela : - créer un variable Arrosage fait : OUI / NON - j'ai donc un couple LEGER/IMPORTANT et OUI/NON - lorsque l'arrosage sera terminé alors on passe la variable à OUI - si variable à OUI (et suivant LEGER ou IMPORTANT) je rajoute x mm à la valeur YESTERDAY après la avoir fait la requête en 3 pour ne pas écraser la valeur - on repasse la variable à NON est ce que ca vous parait bon ?
-
non non je suis pas vexé, et je suis d'accord avec toi, que ce n'est pas suffisant mais c'est un debut et comme je me bats à chaque ligne de code ... c'est pas simple :-) je viens de gagner une bataille (enfin j'espère :-)) local RepriseTable = json.decode(fibaro:getGlobalValue("Precipitations"))
-
fait toi plaisir, c'est collaboratif :-) on peut récupérer facilement les températures, vents etc de WU, après faut écrire l'algo qui interprète ces valeurs. pour revenir à ma lecture de table, la table est bien remonté avec ton code jojo, j'ai fait un test et je vois bien [10,9,8,7,6,5,4,3,2,1,0] pour la relecture, je tentai un simple local relecturetable = fibaro:getGlobal('PRECIPITATIONS') mais ensuite si j'essai de faire des opérations avec la nouvelle table, ça bug est ce qu'il faut faire qq chose de + compliqué ? json.decode ?
-
Ca àpas l'air mal. je vais essayer de la relire ailleurs. (enfin trouver le code pour la relire d'abord:-))
-
j'ai déjà le code avec la table local precipitation = {} local max_day = previous_10days + 1 for i = 2, max_day do local response ,status, err = WGROUND:GET("/api/"..cle_api.."/history_".. os.date("%Y%m%d",os.time()-(i-1)*24*3600) .."/lang:FR/q/pws:"..pws..".json") local jsonTable = json.decode(response) fibaro:debug(os.date("%Y%m%d",os.time()-(i-1)*24*3600)) fibaro:debug(jsonTable.history.dailysummary[1].precipm) if tonumber(jsonTable.history.dailysummary[1].precipm) ~= nil then precipitation[i] = jsonTable.history.dailysummary[1].precipm end end rainyesterday = precipitation[2] rain5days = rainyesterday+precipitation[3]+precipitation[4]+precipitation[5]+precipitation[6] rain10days = rain5days+ precipitation[7]+precipitation[8]+precipitation[9]+precipitation[10]+precipitation[11] fibaro:debug(" Il est tombé " .. rainyesterday .. " mm hier") fibaro:debug(" Il est tombé " .. rain5days .. " mm depuis " .. previous_5days .. " jours") fibaro:debug(" Il est tombé " .. rain10days .. " mm depuis " .. previous_10days .. " jours") ça apport pas grand chose en l'état mais c'est déjà une première pierre. 2eme pierre la boucle de la nuit - pour remonter les valeurs d'un jour; for i = previous_10days, 2, -1 do precipitation[i]= precipitation[(i-1)] end par contre comment écrire cette table dans la variable ? cf ici ? Ma variable est PRECIPITATIONS un fibaro:setGlobal("PRECIPITATIONS", precipitation) donne [ERROR] 10:04:46: line :setGlobal (arg 3), expected 'string const &' got 'table' ca à pas l'air de lui plaire de recevoir une table dans la gueule :-) faut il remettre que le setGlobal soit dans la boucle aussi ? besoin d'un expert ici !!!
-
bon je me lance .... pas taper :-) on crée une table precipitations = {} precipitation[1] = celle du jour ensuite on fait nos appels dans notre boucle avec for i =2 to previous10days (qui devrait prendre la valeur 11 alors) et donc à chaque itération on fait precipitations[i] = jsonTable.history.dailysummary[1].precipm on devrait avoir une table avec 11 valeurs. 11 valeurs que la peut sommer suivant le besoin JOUR=1 5 derniers jours c'est 1+2+3+4+5 ou 2+3+4+5+6 suivant le plus intelligent 10 derniers Jours c'est .... si j'ai fait un arrosage alors on appuie sur un bouton qui donne : precipitations[1]=precipitations[1] + "Valeur arrosage" ensuite chaque nuit on fait for i = 1 to previous10days-1 precipitation[i]= precipitation[i+1] ce qui voudrait dire que l'on fait un appel 10days 1seule fois et ensuite on fait uniquement l'appel JOUR (et prévisions) j'ai bon ou je vais me coucher ? EDIT : bon une connerie dans la derniere boucle car j'écrase les valeurs, faut partir de 9 qui devient 10, 8 qui devient 9 etc... est ce que ça ça marche ? for i =previous10days-1 to 1 precipitation[i]= precipitation[i+1]
-
calculer le nombre de mm, depend du debit de chacun au robinet, ca se mesure facilement mais oui je suis d'accord, la 1ere étape est le tableau
-
Oue je te suis mais la je suis hors jeu. Incapable de faire ça. Faut faire appel au fofo !!!
-
bon j'ai resolu mon probleme d'ajout de bouton :-) je vais pouvoir continuer :-) donc l'idée suivante est de faire ; si un arrosage est effectué, alors je rajoute x mm à la valeur Jour, Hier, 5jours, 10jours, par contre je sais pas encore comment faire ... je peux passer par une variable qui prendrait la valeur Precipitations + Arrosage sauf qu'il faut que je sache si c'est J1 ou J2, J3 etc... avez vous une idée comment démarrer ?
-
Bonjour Did, tu habites ou ? en suivant ce lien, il faut choisir une station avec un chiffre dans le rond violet, si pas de chiffre cela veut dire pas de pluviometre. il faut aussi faire attention car certaines stations semblent pas très bien calibré. http://french.wunderground.com/personal-weather-station/dashboard?ID=IAQUITAI78 (dezoom la carte pour te situer puis rapproche toi pour trouver la bonne station) le VD mets à jour une variable qui a 3 états, et ensuite j'utiliserai (installation en cours de réalisation) GEA pour activer l'électrovanne, suivant l'état de la variable. Suivant l'état de la variable aussi le temps d'activation de l'EV sera different. (+ ou - long) le VD aujourd'hui permet de dire si oui ou non je dois arroser en prenant en compte uniquement les mm de pluie tombées (sur une période antérieure et future) il est donc nécessaire de l'ameliorer pour qu'ils prennent en compte aussi le mm ici de l'arrosage. Car par exemple, imaginons, une période sans pluie. J'arrose longtemps le Lundi, il faut que le VD le prenne en compte pour que le Mardi il me dit que tout est ok et que l'herbe est bien verte :-) EDIT ; petit soucis, si je veux créer d'autres boutons ???? vous savez ce que c'est ? pourtant j'ai essayé avec des noms de boutons genre "wxc" pour être sur ... comprends pas
-
tout depend des paramètres de calculs. j'ai mis une limite à 3mm - chez toi il est tombé 1.8 hier donc pas suffisant et 1 aujourd'hui idem (d'ailleurs je pense qu'il faudrait les sommer quelque part) et la prevision est que de 1 donc besoin arrosage. avec les mains voila comment ca marche tu definis ce dont tu as besoin par jour et indique le nombre de jour de prevision local quantie_jour_mm = 3 local nb_jour_prevision = 2 ensuite Si la prevision est > au besoin par jour * nombre de jour (6 dans l'exemple) alors --> pluie annoncée --> arrosage NON Si sur les 5 derniers jours il a plu besoin*nombre de jour (6) * 1.5 (pour de la marge) =9 alors --> Il a beaucoup plus --> arrosage NON Si le jour meme il a plu plus que 3mm alors --> il a plu --> arrosage NON Si hier il a plus plus que 3mm alors --> il a plu hier --> arrosage NON Si sur les 5 derniers jour il a plus plus que 5mm mais que la prevision est moins de 6mm alors --> arrosage court --> arrosage Leger Sinon --> arrosage long --> arrosage important avec à chaque fois une verification si il pleut en ce moment meme. Le calcul est discutable, et je suis preneur de quelque chose de mieux si on trouve. deja je vois que dans le label Hier, il faudrait aussi prendre en compte le Jour --> car si hier il a plus 2.5mm et aujourd hui 2.5 aussi pas besoin d'arroser alors que dans ce calcul si ... pas sur que cela soit très clair :-)
-
Je sais pas si le toolkit du Krikoff permet de lire le code des VD ? rien d'extraordinaire sur le calcul, mais je dis juste si pluie Hier alors pas besoin ----------------- calcul ---------------------- local selfId = fibaro:getSelfId() local Dday = tonumber(fibaro:getValue(selfId, "ui.lblJour.value")) local days1 = tonumber(fibaro:getValue(selfId, "ui.lblHier.value")) local days10 = tonumber(fibaro:getValue(selfId, "ui.lbl10.value")) local days5 = tonumber(fibaro:getValue(selfId, "ui.lbl5.value")) local prevision = tonumber(fibaro:getValue(selfId, "ui.lblPrevu.value")) local pluiencours = tonumber(fibaro:getValue(selfId, "ui.lblHeure.value")) > 0.1 local msg = "" if (prevision > (quantie_jour_mm*nb_jour_prevision)*1) then -- Il est prévu de pleuvoir plus que souhaité msg = "Pluie annoncée" fibaro:setGlobal("Arrosage", "Non") elseif (days5 > (quantie_jour_mm*nb_jour_prevision)*1.5) then -- Il a trop plu msg = "Il a beaucoup plu" fibaro:setGlobal("Arrosage", "Non") elseif (Dday > 3) then -- Il a plu if (pluiencours) then msg = "Il pleut" fibaro:setGlobal("Arrosage", "Non") else msg = "Il a plu suffisamment" fibaro:setGlobal("Arrosage", "Non") end elseif (days1 > 3) then -- Il a plu if (pluiencours) then msg = "Il pleut" fibaro:setGlobal("Arrosage", "Non") else msg = "Il a plu hier" fibaro:setGlobal("Arrosage", "Non") end elseif (days5 > 5 and (prevision < (quantie_jour_mm*nb_jour_prevision)*1)) then -- Sol sec, arrosage utile if (pluiencours) then msg = "Il pleut" fibaro:setGlobal("Arrosage", "Non") else msg = "Arrosage Court" fibaro:setGlobal("Arrosage", "Leger") end else if (pluiencours) then msg = "Il pleut" fibaro:setGlobal("Arrosage", "Non") else msg = "Arrosage Long" fibaro:setGlobal("Arrosage", "Important") end end
-
V1.5 en ligne sur le post 1 pour optimiser les appels sur 1bouton. j'ai mis en forme aussi, l'ordre des boutons on a donc - Today qui fait 1 appel - Last Days, qui fait 10 appels - Next 2 days, qui fait 1 appel du coup je rafraichi toutes les 10mns Today et NextDays --> 2 appels * 6 requetes/h * 24 = 288 et 1 click toutes les nuit sur Last Day = 10 TOTAL 298 (GEA et MainLoop à jour sur le 1er post) J'ai aussi rajouté qq lignes dans le calcul d'arrosage pour prendre en compte les data Hier. Bonne journée
-
c'est bon je l'ai local previous_10days = 10 -- max 10 calls per minute local previous_5days = 5 local yesterday = 1 rainyesterday = 0 rain5days = 0 rain10days = 0 for i = 1, previous_10days do local response ,status, err = WGROUND:GET("/api/"..cle_api.."/history_".. os.date("%Y%m%d",os.time()-i*24*3600) .."/lang:FR/q/pws:"..pws..".json") local jsonTable = json.decode(response) fibaro:debug(os.date("%Y%m%d",os.time()-i*24*3600)) fibaro:debug(jsonTable.history.dailysummary[1].precipm) if tonumber(jsonTable.history.dailysummary[1].precipm) ~= nil then rain10days = rain10days + jsonTable.history.dailysummary[1].precipm end for i = 1, yesterday do if tonumber(jsonTable.history.dailysummary[1].precipm) ~= nil then rainyesterday = jsonTable.history.dailysummary[1].precipm end end for i = 1, previous_5days do if tonumber(jsonTable.history.dailysummary[1].precipm) ~= nil then rain5days = rain5days + jsonTable.history.dailysummary[1].precipm end end end fibaro:debug(" Il est tombé " .. rainyesterday .. " mm hier") fibaro:debug(" Il est tombé " .. rain5days .. " mm depuis " .. previous_5days .. " jours") fibaro:debug(" Il est tombé " .. rain10days .. " mm depuis " .. previous_10days .. " jours") pas le temps de mettre une V1.5 - je dois partir au resto demain
-
@megabubu, merci, si ca peut servir je suis très content @jojo, encore une fois 100% d'accord j'avais tenté de le faire ( http://www.domotique-fibaro.fr/index.php/topic/4626-pluviométrie-avec-netatmo/?p=70635) mais mes connaissances étant ce qu'elles sont je n'avais pas réussi (je voulais inclure un if dans un if) comme le VD marche bien maintenant je vais retenter le coup
-
Vas y [emoji1]
-
Lol Tu peux peut être en attendant t en servir pour savoir si tu te douche ou pas. Genre Tahiti douche. Comprends qui peut. [emoji1]
-
en ligne. le main loop est toujours àcopier/coller depuis le post1 j'ai mis en commentaire le "push" sur smartphone, vous pouvez le remettre si vous voulez
-
voilà j'ai mis à jour le post1 avec le main loop sur input de jojo perso j'ai rajouté dans le bouton calcul elseif (Dday > 3) then -- Il a plu msg = "Il a plu" fibaro:setGlobal("Arrosage", "Non") pour tenir compte de la pluie du Jour
