Message populaire Sakkhho Posté(e) le 13 mai 2015 Message populaire Signaler Posté(e) le 13 mai 2015 (modifié) Pluviométrie Avec WeatherUnderground Bonjour, Sur une idée originale de Steven, qui remonte les données d'un pluviomètre Netatmo et récupère les previsions depuis le site de WU, j'ai crée ce VD qui permet de s'affranchir de l'achat d'un pluviomètre et de faire appel uniquement à WU pour récupérer les précipitations (de la dernière heure, du jour, d'hier, des 5 derniers jours et des 10 derniers jours) d'une station WU proche de chez vous; Suite à ca on fait un rapide calcul (à affiner selon vos besoins) pour mettre à jour une variable globale. (credit Steven aussi - je n'ai pas encore affiner ce calcul avec les datas que je remonte - ca sera une V2) Cette variable sert ensuite chez moi à déclencher l'arrosage automatique. HC2 en V4 (et 3.6 après le test de Jojo) 1ère étape - Creation des clefs WU à l'adresse ici Pour crée un compte : http://www.wundergro...pi/d/login.html Pour trouver sa "station ID" : http://www.wundergro...dCountry=France La création du compte va vous permettre d'obtenir une "cle api" Et la recherche de la station la plus proche de chez vous, une station ID (attention à bien choisir une station qui mesure à les precipitations .. ;-) Important Les clés gratuites permettent 500 appels par jour et 10appels par minutes. Dans le VD vous avez 4 boutons - Today qui fait 1 appel - Last Days, qui fait 10 appels - Next 2 days, qui fait 1 appel il faut donc faire attention à vos clicks :-) si vous dépasser la limite, c'est le carton jaune, au bout de 3 carton jaune, c'est le rouge et la clé est HS. (Perso ce que j'ai fait c'est créer une clé pour les 10jours. et une autre pour les 2 autres boutons, et j'utilise GEA pour cliquer à intervalle régulier sur les boutons, sans dépasser les 500 appels jours / clef.) -- Arrosage GEA.add(true, 10*60, "", {{"VirtualDevice", id["CALCUL_ARROSAGE"], 2},{"Repeat"}}) -- Historique Pluie du Jour et derniere heure GEA.add(true, 30, "", {{"Time", "02:06", "02:07"},{"VirtualDevice", id["CALCUL_ARROSAGE"], 5}}) -- Historique Pluie jusqu'à 10jours GEA.add(true, 10*60, "", {{"VirtualDevice", id["CALCUL_ARROSAGE"], 9},{"Repeat"}}) -- Prévisions à 2 jours ce qui donne 300 appels par jour et max 10appels /mn - donc ok pour 1clef, sauf si l'appel 10jours passe la meme minutes qu'un autre appel ... Pour ceux qui n'ont pas GEA, voici ce que vous pouvez mettre dans le main loop (j'ai pas testé donc merci pour vos retours si ça fonctionne pas) 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 == "02:06" then fibaro:call(fibaro:getSelfId(), "pressButton", "5") fibaro:debug("heure OS : " ..Var_Heure .."Historique des derniers jours récupéré") 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 .."Historique du jour récupéré") fibaro:call(fibaro:getSelfId(), "pressButton", "9") fibaro:debug("heure OS : " ..Var_Heure .."Prévisions récupérées") end fibaro:sleep(60*1000) -- sleep 1 min end 2eme étape - Importer le VD - Modifier la clé (ou les clefs) API et la Station ID dans tous les boutons (sauf calcul) - Modifier l'id de votre smartphone dans le bouton calcul arrosage - Modifier les ID de vos icones dans la bouton calcul arrosage 3eme étape - Créer une variable "Arrosage" avec 3 valeurs Non, Leger, Important J'utilise les icônes de Couillerot merci à lui. Merci. Mon 1er VD partagé sur le forum. En remerciement pour tout ce que je prends/deja pris et ce que j'apprends ! V.1.0 V.1.1: optimisation sur conseil de jojo V.1.2: integration des icônes en fonction de l'arrosage nécessaire (toujours sur idée de jojo) V.1.3: meilleure gestion des appels et 1clé WU peut suffire V.1.4: fine tuning V.1.5: optimisation des appels historiques sur 1 bouton (merci jojo) -- 15 Mai 2015 -- V2.1 : ici Calcul_Arrosage V1.5.vfib Modifié le 1 juin 2015 par Sakkhho 1 11
jojo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 merci pour ceci qui a l'air super. Devine ce que je vais faire en premier ? Regarder pourquoi cela ne pourrait pas fonctionner en 3.600, et, avec ta permission, et si c'est possible, le rendre compatible v3.x
Sakkhho Posté(e) le 13 mai 2015 Auteur Signaler Posté(e) le 13 mai 2015 fait toi plaisir :-) si ca se trouve c'est deja compatible ? par contre une remarque, ou plutôt un ordre : passe en 4.042 !!!!!!! 1
jojo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 (modifié) ton MV, fonctionne impec en 3.600 => tu peux supprimer la restriction. pour le last 10 days, il m'a fait une erreur, car il lui manquait une valeur ? en faisant ce test à la ligne 12, ça passe if tonumber(jsonTable.history.dailysummary[1].precipm) ~= nil then rain10days = rain10days + jsonTable.history.dailysummary[1].precipm end Il faudrait peut-être prévoir cela également pour les autres boutons EDIT : nos messages se sont croisé. Bien sà»r que je me suis fait plaisir ! Modifié le 13 mai 2015 par jojo 1
Sakkhho Posté(e) le 13 mai 2015 Auteur Signaler Posté(e) le 13 mai 2015 peut être un problème sur la station que tu interroges. voici la V1.1 suite à tes conseils. Calcul_Arrosage V1.1.vfib
jojo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 j'en connais un qui dirait : tu ne peux pas me mettre le code, histoire que je n'ai pas de nouvel ID qui soit créé ? Vois-tu de qui je veux parler ?
Sakkhho Posté(e) le 13 mai 2015 Auteur Signaler Posté(e) le 13 mai 2015 oui je vois bien ;-) d'ailleurs j'ai trouvé comment exporter le VD... en fait sous SAFARI ca bug, sous CHROME c'était ok voici le code ligne 13 à 43 bouton 5jours -- precipitations derniere heure et aujourd'hui -- local response ,status, err = WGROUND:GET("/api/"..cle_api.."/conditions/lang:FR/q/pws:"..pws..".json") local jsonTable = json.decode(response) fibaro:debug(jsonTable.current_observation.precip_1hr_metric) if tonumber(jsonTable.current_observation.precip_1hr_metric) ~= nil then rain1hour = jsonTable.current_observation.precip_1hr_metric end fibaro:debug(jsonTable.current_observation.precip_today_metric) if tonumber(jsonTable.current_observation.precip_today_metric) ~= nil then raintoday = jsonTable.current_observation.precip_today_metric end -- precipitations hier -- local response ,status, err = WGROUND:GET("/api/"..cle_api.."/history_".. os.date("%Y%m%d",os.time()-1*24*3600) .."/lang:FR/q/pws:"..pws..".json") local jsonTable = json.decode(response) fibaro:debug(os.date("%Y%m%d",os.time()-1*24*3600)) fibaro:debug(jsonTable.history.dailysummary[1].precipm) if tonumber(jsonTable.history.dailysummary[1].precipm) ~= nil then rainyesterday = rainyesterday + jsonTable.history.dailysummary[1].precipm end -- precipitations des 5 derniers jours -- for i = 1, previous_day 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 rain5days = rain5days + jsonTable.history.dailysummary[1].precipm end end ligne 7-15 boutons 10jours 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 end je touche pas le bouton prévisions car je pense pas que ca buggera celui la.
jojo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 merci beaucoup. Sur base de cette idée, il m'en vient encore une autre pour faire évoluer : en fonction du calcul du niveau d'arrosage (Non, Léger ou Important), il pourrait afficher automatiquement une icône non : http://www.domotique-fibaro.fr/index.php/gallery/image/3641-arrosage-off/ léger : http://www.domotique-fibaro.fr/index.php/gallery/image/3647-goutte-a-goutte-1/ important : http://www.domotique-fibaro.fr/index.php/gallery/image/3645-arrosage-on/ ?
Sakkhho Posté(e) le 13 mai 2015 Auteur Signaler Posté(e) le 13 mai 2015 Oui c est sympa. Par contre c est pas forcément lié (goutte àgoutte et arroseur) Obliger de demander àCouillerot de nous faire un icône arossage long/court. :-)
jojo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 ou alors simplement le important en supprimant des jets, pour le rendre léger
Sakkhho Posté(e) le 13 mai 2015 Auteur Signaler Posté(e) le 13 mai 2015 hop V1.2 avec les icônes (icônes léger en attente ;-) j'ai passer la prévisions à 2 jours - mais vous pouvez la remonter à 3 si vous le souhaitez. je trouve que 2jours de sol très sec c'est suffisant pour déclencher un arrosage à j-2 pour éviter l'import du VD à rajouter au debut ---- id des icones --- local Icone_leger = 1100 local Icone_important = 1100 local Icone_off = 1099 puis suivant le passage de la variable "arrosage" Num_Icone = Icone_off ou Num_Icone = Icone_important ou Num_Icone = Icone_leger suivant le cas et à la fin fibaro:call(selfId , "setProperty", "currentIcon", Num_Icone) Calcul_Arrosage V1.2.vfib
jojo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 autre idée (quand je suis lancé, ...) J'ai compris qu'il fallait être radin/économe avec l'utilisation des clés. Pour l'historique journalier (hier, 5 derniers jours, 10 derniers jours) : cela ne change qu'une fois par jour. Donc faisons 1 bouton qui serait appelé tous les jours à 3h par GEA (= 1 + 5 + 10 = 16 requêtes par jour). Pour l'historique du jour : ok pour mise à jour toutes les 60 min (= 2*24 = 48 requêtes / jours) (quelle est la fréquence de mise à jour du site, si toutes les heures, inutile de l'interroger toutes les 30 min) Pour les prévisions à 3 jours : quelle est la fréquence de mise à jour du site ? Si toutes les heures = 3 appels * 24 = 72 appels. On aurait alors 16 + 48 + 72 = 136 appels / j mon raisonnement / calcul est-il juste ?
Sakkhho Posté(e) le 13 mai 2015 Auteur Signaler Posté(e) le 13 mai 2015 oui sauf que le bouton 10jours fait 10appel en moins d'1 minute, donc tu peux pas le coupler avec un autre, sauf faire un fibaro(sleep) dans la boucle. (pourquoi pas..) pour le reste - la mise à jour depends de la station que tu interroges j'ai pu lire, certaines font ca toutes les 5mn, d'autres tous les 30mn, c'est pour cela qu'avec GEA je fais un appel toutes les 30mn. Ca suffit largement et ca permet de ne pas saturer les appels. - prevision 3jours, je sais pas trop la fréquence de mise à jours, mais bon j'ai regler mon GEA pour qu'avec la meme clé que le bouton 1 ca passe.
jojo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 bien vu pour les 10 appels dans la minute pour le 10jours => il doit être dans un bouton séparé des autres. Mais je ne comprends pas pourquoi tu interroges toutes les heures pour l'historique des 10 derniers jours ? Donc je verrais ceci comme bouton : historique du jour : la dernière heure, et aujourd'hui. Interrogé toutes les 30 min = 2 * 48 = 96 appels / j historique des 5 derniers jours : interrogé 1 fois par jour à 2h : 5 appels / j historique des 10 derniers jours : interrogé 1 fois par jour à 3h : 10 appels / j (! de ne pas rentrer en conflict avec historique du jour et prévision, mais c'est gérable facilement grâce à GEA) prévision 3 jours : interrogé toutes les 30 min = 3*48 = 144 appels / j donc avec 1 clé j'aurais 96 + 5 + 10 + 144 = 255 appels / j ?
Sakkhho Posté(e) le 14 mai 2015 Auteur Signaler Posté(e) le 14 mai 2015 je suis d'accord avec toi, mais c'était pour éviter de faire trop de boutons. J'avais rassemblé de 0 à 5 jours ensemble. peut être que cela charge le système pour rien. si on fait ce que tu proposes ca donne historique du jour : la dernière heure, et aujourd'hui. Interrogé toutes les 30 min = 2/h * 24h = 48 appels / j historique des 5 derniers jours : interrogé 1 fois par jour à 2h : 5 appels / j + 1 pour Hier historique des 10 derniers jours : interrogé 1 fois par jour à 3h : 10 appels / j (! de ne pas rentrer en conflict avec historique du jour et prévision, mais c'est gérable facilement grâce à GEA) prévision 3 jours : interrogé toutes les 30 min = 2/h*24h = 48 appels / j = 112, il y a de la marge on pourrait donc augmenter en faisant; historique du jour : la dernière heure, et aujourd'hui. Interrogé toutes les 15 min = 4h * 24h = 96 appels / j historique des 5 derniers jours : interrogé 1 fois par jour à 2h : 5 appels / j + 1 pour Hier historique des 10 derniers jours : interrogé 1 fois par jour à 3h : 10 appels / j (! de ne pas rentrer en conflict avec historique du jour et prévision, mais c'est gérable facilement grâce à GEA) prévision 3 jours : interrogé toutes les 15 min = 4/h*24h = 96 appels / j = 208 faut faire attention que l'appel de 10jours ne tombe pas la meme minute que l'historique ou que la prevision, sinon tu dépasses les 10 appels minutes. avec 2 clé on est tranquille ... et ca prends 2secondes pour en créer une. tiens une question pour les icônes, comment faire pour que les icônes change uniquement quand appuie sur le bouton calcul ? car la chaque appuie sur prevision ou historique remets l'icone dans un autre état. faut mettre cela dans le main loop ?
jojo Posté(e) le 14 mai 2015 Signaler Posté(e) le 14 mai 2015 merci de ton retour. Comme on a encore beaucoup de marge, est-il possible qu'avoir plus d'info sur l'historique du jour ? (dernière heure, dernières 6h, dernières 12h, dernière 18h et aujourd'hui par exemple, mais il me semble que ce ne serait qu'1 appel) : il faut voir si c'est possible avec 1 appel pour chaque commande, sinon on exploserait le cota de 10 appels/min Pour éviter que l'historique du jour et des prévision à 3 jour ne tombe en même temps que l'historique des 10 derniers jours, on rajouterait pour les deux premier une condition GEA {"Time", "03:15", "02:45"}
Sakkhho Posté(e) le 14 mai 2015 Auteur Signaler Posté(e) le 14 mai 2015 peut être bien possible si on va interroger le "Hourly" http://www.wunderground.com/weather/api/d/docs?d=data/hourly faut que je regarder comment est construit le json ici mais tu penses vraiment que cela soit utile ? la fonction c'est de savoir si il a plu ou si il va pleuvoir, pour ne pas arroser pour rien dans l'Heure, c'est juste pour afficher : il pleut, l'info en tant que tel est pas vraiment utile, et consolidé dans le "jour" l'important c'est de savoir si il a plu aujourd'hui : Jour et si il a plu Hier et le cumul des derniers jours 5jours est important, 10jours un peu mois (si mega orage il y a 10jours, mais temps très sec depuis, je devrai arroser) avoir l'info de 6h 12h 18h, c'est plus pour le fun non ?
jojo Posté(e) le 14 mai 2015 Signaler Posté(e) le 14 mai 2015 oui, tu as tout à fait raison, 6, 12 & 18 H c'est plus pour le fun. Si effectivement c'était dans le même json, alors pourquoi pas. Mais ne changeons rien. Je pense que réarranger les boutons pour être ok avec une clé a en effet une bien plus grande valeur ajoutée. Je partage totalement ton avis : la fonction c'est de savoir si il a plu ou si il va pleuvoir, pour ne pas arroser pour rien dans l'Heure, c'est juste pour afficher : il pleut, l'info en tant que tel est pas vraiment utile, et consolidé dans le "jour" l'important c'est de savoir si il a plu aujourd'hui : Jour et si il a plu Hier et le cumul des derniers jours 5jours est important, 10jours un peu mois (si mega orage il y a 10jours, mais temps très sec depuis, je devrai arroser)
Sakkhho Posté(e) le 14 mai 2015 Auteur Signaler Posté(e) le 14 mai 2015 je suis vraiment une quiche avec les boucles if pour être plus propres avec les icones je voulais mettre dans le main loop ---- id des icones --- local Icone_leger = 1100 local Icone_important = 1100 local Icone_off = 1099 ------------------------- local selfId = fibaro:getSelfId() local Situation = fibaro:getGlobalValue("Arrosage") if (Situation == ("Non")) then Num_Icone = Icone_off Elseif (Situation == ("Leger")) then Num_Icone = Icone_leger Elseif (Situation == ("Important")) then Num_Icone = Icone_important End fibaro:call(selfId , "setProperty", "currentIcon", Num_Icone) sauf que comme d'hab il me jette avec mes "if" [ERROR] 11:13:53: line 12: unexpected symbol near 'then'
Sakkhho Posté(e) le 14 mai 2015 Auteur Signaler Posté(e) le 14 mai 2015 c'est bon je l'ai eut :-) ---- id des icones --- local Iconeleger = 1100 local Iconeimportant = 1100 local Iconeoff = 1099 ------------------------- local selfId = fibaro:getSelfId() local Situation = fibaro:getGlobalValue("Arrosage") if (Situation == ("Non")) then NumIcone = Iconeoff elseif (Situation == ("Leger")) then NumIcone = Iconeleger else NumIcone = Iconeimportant end fibaro:call(selfId ,"setProperty","currentIcon", NumIcone) est ce que c'est genant d'avoir cela dans le main loop ?
Plap3014 Posté(e) le 14 mai 2015 Signaler Posté(e) le 14 mai 2015 Super boulot Sakkhho, si nous avons pas encore GEA d'intégré, comment pouvons-nous faire pour faire les clics seulement des boutons? ou j'installe GEA est rajoute ton bout de code pour le faire fonctionner? merci, Patrick
Sakkhho Posté(e) le 14 mai 2015 Auteur Signaler Posté(e) le 14 mai 2015 je vais regarder dans la prochaine version pour mettre les appuies dans le main loop pour ceux qui n'ont pas GEA 1
cybersquat Posté(e) le 14 mai 2015 Signaler Posté(e) le 14 mai 2015 Bravo les gars, un projet génial pour ceux qui n'ont pas de pluviomètre ^^ C'est vraiment sympa de voir des passionnés comme vous
jojo Posté(e) le 14 mai 2015 Signaler Posté(e) le 14 mai 2015 oui, tu peux le mettre dans la main loop, mais je ne la chargerait pas trop. Et comme l'icône ne changerait que si la prévision change, donc, je laisserais l'affichage de l'icône àla fin du code de calcul de la prévision. SI on utilise GEA, on n'a pas besoin de la main loop
Sakkhho Posté(e) le 14 mai 2015 Auteur Signaler Posté(e) le 14 mai 2015 @cybersquat ; merci ! @jojo, l'appuie régulier sur les boutons, ne gardera pas l'icône de calcul (un appui sur le futur bouton Today, prendra l'icône de ce meme bouton, pas l'icone du calcul d'arrosage) D'ou le main loop. mais comme toi j'aime pas le mainloop (peut être injustifié) je vais donc mettre le calcul de l'icone dans 3 boutons (jour,prevision et calcul arrosage) voila le GEA que je propose -- Arrosage GEA.add(true, 15*60, "", {{"VirtualDevice", id["CALCUL_ARROSAGE"], 8},{"Repeat"}}) -- Historique Jour et derniere heure GEA.add(true, 30, "", {{"Time", "02:00", "02:01"},{"VirtualDevice", id["CALCUL_ARROSAGE"], 9}}) -- Historique 5 Jours Pluie GEA.add(true, 30, "", {{"Time", "03:00", "03:01"},{"VirtualDevice", id["CALCUL_ARROSAGE"], 10}}) -- Historique 10 Jours Pluie GEA.add(true, 15*60, "", {{"VirtualDevice", id["CALCUL_ARROSAGE"], 11},{"Repeat"}}) -- Prévisions à 2 jours GEA.add(true, 20*60, "", {{"VirtualDevice", id["CALCUL_ARROSAGE"], 12},{"Repeat"}}) -- Calcul Arrosage qui donne : 1*4*24+6+10+1*4*24=208 appel jour et si l'appel 10days, ne tombe pas dans la meme minute qu'un autre appel alors on est safe ...
Messages recommandés