Aller au contenu

Pluviométrie Avec Weatherunderground


Sakkhho

Messages recommandés

surtout pas : l'icône à  afficher dépend du calcul qui détermine l'action à  faire (arroser, pas, un peu, beaucoup, (tendrement, à  la folie, :) )

Donc à  la fin de chaque appuit sur une des icônes de mise à  jour des données (futur today, 5 jours, 10 jours, +3 jours) je lui dirait d'appuyer sur le bouton calcul : comme ça tu n'as que une fois le code de logique de calcul, et ce bouton mets la bonne icône. On n'associe aucune icône au VD et à  chacun de ses boutons. Cela offre un avantage supplémentaire, c'est que si on voir l'horrible cube bleu, c'est qu'il n'est pas allé au bout et qu'il y a eu une erreur 

Lien vers le commentaire
Partager sur d’autres sites

pour le main loop si vous avez pas GEA, je pense qq chose de ce style (corrigez moi si je me trompe)

while true do
   local Var_Heure = os.date("%H:%M")
   --fibaro:debug("heure OS : " ..Var_Heure)
   if Var_Heure == "02:01" then
      fibaro:call(fibaro:getSelfId(), "pressButton", "9")
      fibaro:debug("heure OS : " ..Var_Heure .."Historique des 5 derniers jours récupéré")
   elseif Var_Heure == "03:01" then
      fibaro:call(fibaro:getSelfId(), "pressButton", "10")
      fibaro:debug("heure OS : " ..Var_Heure .."Historique des 10 derniers jours récupéré")
   end
fibaro:sleep(60*1000)
end

par contre l'appuie régulier toutes les 15mn faut que je regarde de plus près - 

 

 

V.1.3 de dispo sur le 1er post - je regarde encore ce qu'il faut mettre dans le main loop pour l'appuie régulier 

Lien vers le commentaire
Partager sur d’autres sites

et pour ce qui est de l'appuis régulier tous les 15min, je proposerais ceci dans le main loop

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", "9")
      fibaro:debug("heure OS : " ..Var_Heure .."Historique des 5 derniers jours récupéré")
   elseif Var_Heure == "03:06" then
      fibaro:call(fibaro:getSelfId(), "pressButton", "10")
      fibaro:debug("heure OS : " ..Var_Heure .."Historique des 10 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", le boutou à  appuyer toutes le 15 min)
   end
fibaro:sleep(60*1000) -- sleep 1 min
end

j'ai mis le appuis journaliers à  2h06 et 3h06, pour être sà»r qu'il n'y ait pas de chevauchement.

 

Dans ta v1.3 as-tu déjà  fait le split des boutons ?

Lien vers le commentaire
Partager sur d’autres sites

merci jojo je mets à  jour le 1er post.

oui la 1.3 à  la split comme vu le screenshot du 1er post

 

Test en temps réel, pluie sur Paris

 

j'utilise cette station : http://www.wunderground.com/personal-weather-station/dashboard?ID=ISAINTGE24

elle vient de remontée 0.25mm  de pluie --> cool ça marche bien

 

par contre l'appel du JSON 

donne encore

   

        "precip_1hr_metric":" 0",

        "precip_today_metric":"0",

 

 

car je pense car c'est un nombre entier et que ça affichera qu'à  partir de 1mm

 

 

si je prends une station ou il a plus plu (3mm)

http://www.wunderground.com/personal-weather-station/dashboard?ID=IILEDEFR53

 

le JSON remonte bien 

         "precip_1hr_metric":" 2",
        "precip_today_metric":"3"

faudra donc être patient et regarder la pluie tomber :-)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

ca marche super pour moi et j'ai pris le GEA de 13:04

 

Bon le plus drole : j'ai pas de jardin encore, donc rien a arroser du tout ;-)..en atte,ndant la fin de la construction merci beaucoup sakkhho

 

:60: :60: :60:

Lien vers le commentaire
Partager sur d’autres sites

J'ai encore une idée pour économiser des calls et rassembler les boutons Last 5 Days et Last 10 Days.

Last 5 Days fait 1 call pour hier, puis 5 call pour les 5 derniers jours, c'est-à -dire J-1, J-1, J-2, J-3, J-4, J-5

Last 10 Days fait 10 call pour les 10 derniers jours, c'est-à -dire : J-1, J-2, J-3, ..., J-10

 

Tu vois où je veux en venir ?

 

Donc un bouton l'actuel Last 10 Days, et 

hier = J-1

5 derniers jours = J-1 + J-2 + J-3 + J-4 + J-5

10 derniers jours = J-1 + J-2 + J-3 + J-4 + J-5 + J-6 + J-7 + J-8 + J-9 + J-10 ou (5 derniers jours ) + J-6 + J-7 + J-8 + J-9 + J-10

Lien vers le commentaire
Partager sur d’autres sites

@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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

je propose ceci, ça me paraît plus clair

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
    if i <= yesterday then
      rainyesterday = rainyesterday + jsonTable.history.dailysummary[1].precipm
    end
    if i <= previous_5days 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") 
Lien vers le commentaire
Partager sur d’autres sites

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

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

peux-tu SVP remettre le code de ton calcul arrosage (que tu as modifié), car suivant tes conseils, j'essaie maintenant de limiter le nombre d'import des VD ...

P.S. très chouette la nouvelle proposition de layout  :60:

Lien vers le commentaire
Partager sur d’autres sites

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

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

merci,

J'ai un peu modifié le début de la partie du calcul, histoire qu'il ne fasse pas d'erreur s'il ne trouve pas de données et qu'il m'affiche un icône, plutôt que l'horrible cube bleu ...

----------------- calcul ----------------------
local selfId = fibaro:getSelfId()
local Dday = tonumber(fibaro:getValue(selfId, "ui.lblJour.value")) or 0
local days1 = tonumber(fibaro:getValue(selfId, "ui.lblHier.value")) or 0
local days10 = tonumber(fibaro:getValue(selfId, "ui.lbl10.value")) or 0
local days5 = tonumber(fibaro:getValue(selfId, "ui.lbl5.value")) or 0
local prevision = tonumber(fibaro:getValue(selfId, "ui.lblPrevu.value")) or 0
local pluiencours = tonumber(fibaro:getValue(selfId, "ui.lblHeure.value")) or 0
pluiencours = pluiencours > 0.1

en fait  quand tu dis "or qqch", si l'expression précédente retourne nil, il met qqch, sinon c'est la valeur de la première expression. Sympa ? 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...