Aller au contenu
Sakkhho

Pluviométrie Avec Weatherunderground

Recommended Posts

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)

 

598735Arrossage.png

 

 

1ère étape

 

photo.jpg

 

- 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  

post-1196-0-99993000-1431536745_thumb.png

post-1196-0-60968700-1431548434_thumb.png

post-1196-0-18593600-1431548442_thumb.png

Calcul_Arrosage V1.5.vfib

Modifié par Sakkhho
  • Thanks 1
  • Upvote 11

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

fait toi plaisir :-)

si ca se trouve c'est deja compatible ?

 

par contre une remarque, ou plutôt un ordre : passe en 4.042 !!!!!!!  :2:

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ! :60:

Modifié par jojo
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?  :P

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

?

Partager ce message


Lien à poster
Partager sur d’autres sites

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. :-)

Partager ce message


Lien à poster
Partager sur d’autres sites

ou alors simplement le important en supprimant des jets, pour le rendre léger

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

:) 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"}

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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'

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

je vais regarder dans la prochaine version pour mettre les appuies dans le main loop pour ceux qui n'ont pas GEA

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

@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 ...

Partager ce message


Lien à poster
Partager sur d’autres sites

×