Aller au contenu

Offre Flash Netatmo


Moicphil

Messages recommandés

@Steven, C'est beaucoup mieux par contre j'ai été obligé de faire quelques adaptations :

1 - dans le main loop de la passerelle :

XX étant l'ID du module passerrelle

local int = fibaro:getValue(96, "ui.sIntTemp.value")
local ext = fibaro:getValue(XX, "ui.sExtTemp.value")
local inth = fibaro:getValue(XX, "ui.sIntHum.value")
local exth = fibaro:getValue(XX, "ui.sExtHum.value")

fibaro:call(XX, "setProperty", "ui.lblInfo.value", "Intérieur "..int.." C° / Extérieur "..ext.." C°")
fibaro:call(XX, "setProperty", "ui.lblInt.value", int.." C° / " ..inth.."%")
fibaro:call(XX, "setProperty", "ui.lblExt.value", ext.." C° / " ..exth.."%")

2 - dans le main loop les modules (température int pour l'exemple):

XX étant l'ID du module passerelle

YY étant l'ID du module

local int = fibaro:getValue(XX, "ui.sIntTemp.value")

local inth = fibaro:getValue(XX, "ui.sIntHum.value")

fibaro:call(YY, "setProperty", "ui.lblInfo.value", int.." C° / " ..inth.."%")

3 - Pour l'icone de la passerelle :

Si jamais elle a tendance à  s'éclipser, changer l'icône de chaque slider, et là  plus de soucis.

 

Encore un grand merci à  toi Steven pour cette magnifique intégration.

Lien vers le commentaire
Partager sur d’autres sites

Pour allez plus loin dans mes besoins personnels, j'ai rajouté la quantité de pluie de la semaine ainsi que celle du mois.

 

Et ben c'est pas très très fiable ce que me retourne l'API :)

 

Heure 0

Aujourd'hui 10.2

Semaine 8.800000000000001

Mois 44.4

 

Il y a eu moins depluie cette semaine qu'aujourd'hui ... hummmm est ce que hier les nuages ont aspirer la pluie pour faire -1.4 ? Je vais suivre cela avec attention.

Lien vers le commentaire
Partager sur d’autres sites

Les mesures de type : 

 

1week  - sont remises à  zéro tout les lundi matin

1month - sont remises à  zéro tout les 1er du mois.

 

Pour obtenir la bonne information, il faut demandé les valeurs 1day depuis aujourd'hui - 7 jour et additionner les 7 valeurs retournées

  var d = new Date();
  var t = 1000 * 60 * 60 * 24 * 7
  t = d.getTime() - t;
  d = new Date(t);
  httpmesures = getResponse("https://api.netatmo.net/api/getmeasure","access_token="+token+"&device_id="+int_id+"&module_id="+rain_id+"&scale=1day&type=sum_rain&date_begin="+d.toUTCString())
  data = JSON.parse(httpmesures)
  for (var i in data.body[0].value) {
    rain_week = rain_week + data.body[0].value[i][0]
  }
  rain_week = rain_week.toFixed(2)

Lien vers le commentaire
Partager sur d’autres sites

Et c'est dans tout les Tel and com de France.

Ils liquident car ils ne veulent plus vendre de Netatmo.

 

Je voulais partager l'info au plus vite.

 

Merci pour ton script et ton module.

Je test ça chez moi ce soir.

Lien vers le commentaire
Partager sur d’autres sites

lol oui mais bon cela ne presse pas, j'ai d'abord le tuto dont tu as posté le lien pour le PHP à  regarder / mettre en place ;)

 

Voici voilà 

 

Si on pars du principe que tu as un module virtuel qui contient les données utiles pour l'arrosage ... soit la quantité de pluie de la semaine, ou des X derniers jours.

 

409818Pluie.png

 

Je me base sur 2 choses :

  • Les prévisions de pluie
  • La quantité de pluie reçue la semaine dernière
Pour obtenir la quantité de pluie, voici mon code ... j'utilise Weather Underground il faut une clé API que tu peux créer sur leur site et il faut aussi trouvé le PWS le plus proche de chez toi

452822LyonFranceMtorologieWeatherUndergr

 

 

Code du bouton Prévision. Le résultat est stocké dans le label 3 Jours -> qui a comme ID "lblPrevu"

local max_day = 3
local api_key = "XXXXXXXXXXXX"
local pws = "IGENVEVE2"

local WGROUND = Net.FHttp("api.wunderground.com",80)
local response ,status, err = WGROUND:GET("/api/"..api_key.."/forecast/lang:FR/q/pws:"..pws..".json")
local rain = -1
if (response ~= nil) then
	rain = 0
	local jsonTable = json.decode(response)
	
    max_day = max_day + 1
	if (#jsonTable.forecast.simpleforecast.forecastday < max_day) then
		max_day = #jsonTable.forecast.simpleforecast.forecastday
	end
	for i = 1, max_day do
		fibaro:debug(jsonTable.forecast.simpleforecast.forecastday[i].conditions)
		fibaro:debug(jsonTable.forecast.simpleforecast.forecastday[i].qpf_allday.mm)
		rain = rain + jsonTable.forecast.simpleforecast.forecastday[i].qpf_allday.mm
	end
	
  	fibaro:debug("Prévision pour les " .. (max_day-1) .. " prochains jours : "  .. rain .. " mm")
end

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblPrevu.value", rain)
Derrière le code du bouton calculer arrosage, j'ai mis le code suivant 

-- Déterminer si un arrosage est nécessaire
-- en ce basant sur les 7 derniers jours
-- et les 3 prochains

local quantie_jour_mm = 4 -- mon gazon nécessite 4mm / jour
local quantite_mm_en_une_heure = 0.3*4   -- mon arrosage fourni 1.2mm / heure
local nb_jour_prevision = 3 -- le prévisions sont basé sur 3 jours 


local semaine = tonumber(fibaro:getValue(fibaro:getSelfId(), "ui.lblSemaine.value"))
local prevision = tonumber(fibaro:getValue(fibaro:getSelfId(), "ui.lblPrevu.value"))
local pluiencours = tonumber(fibaro:getValue(fibaro:getSelfId(), "ui.lblHeure.value")) > 0.2

local msg = ""
if (prevision > (quantie_jour_mm*nb_jour_prevision)*1.5 ) then
	-- Il est prévu de pluvoir plus que souhaité
	msg = "Il est prévu de beaucoup pleuvoir"
	fibaro:setGlobal("Arrosage", "NON")
elseif (semaine > (quantie_jour_mm*nb_jour_prevision)*1.5) then
	-- Il a trop plu
	msg = "Il a déjà  trop plu"
	fibaro:setGlobal("Arrosage", "NON")
elseif (semaine == 0 and (prevision < (quantie_jour_mm*nb_jour_prevision)*1.5) and (prevision >= (quantie_jour_mm*nb_jour_prevision))) then
	-- Sol sec, préparation utile
	if (pluiencours) then
		msg = "Il pleux"
		fibaro:setGlobal("Arrosage", "NON")
	else
		msg = "Sol sec, préparation souhaitée"
		fibaro:setGlobal("Arrosage", "PREPARATION")
	end
else
	if (pluiencours) then
		msg = "Il pleux"
		fibaro:setGlobal("Arrosage", "NON")
	else
		local besoin = nb_jour_prevision * quantie_jour_mm
		besoin = besoin - prevision
		msg = "Besoin de " .. besoin .. " mm soit " .. math.floor((besoin/quantite_mm_en_une_heure) ).. " heures"
		fibaro:setGlobal("Arrosage", "OUI")
	end
end

-- Je m'envoi un push après chaque calculme laissant le temps d'intervenir.
fibaro:call(122, "sendPush", msg)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label7.value", msg)
fibaro:debug(msg)
Ce code joue avec la variable globale "Arrosage" qui peut être à  "OUI", "NON", "PREPARATION" ensuite j'utilise GEA pour appuyer sur mon bouton "Prévision" tout les jours (Préparation = on attend un peu de pluie mais la terre est trop sèche. On arrose donc un tout petit peu pour préparer le terrain).

 

Je calcule le besoin d'arrosage tout les mardi et vendredi matin  et enclenche si nécessaire (mardi pour un arrosage complet (3h), mardi et vendredi pour un petit arrosage 30mn)

-- ===  Arrosage === --
-- On rafraichi les prévisions de pluie toutes les heures
GEA.add({"Global", "", ""}, 60*60, "", {{"VirtualDevice", id["VD_PLUIE"], "7"}})
-- On calcul le besoin d'arrosage
GEA.add({"Global", "", ""}, 30, "", {{"VirtualDevice", id["VD_PLUIE"], "9"},{"Days", "Tuesday, Friday"}, {"Time", "07:55", "07:56"}})
-- Allumage de l'arrosage automatique
GEA.add({"Global", "Arrosage", "OUI"}, 30, "", {{"turnOn", id["ARROSAGE"]}, {"Days", "Tuesday"}, {"Time","08:00","11:00"}})
GEA.add({"Global", "Arrosage", "PREPARATION"}, 30, "", {{"turnOn", id["ARROSAGE"]}, {"Days", "Tuesday, Friday"}, {"Time","08:00","08:30"}})
-- On éteint
local longarrosage = {"If", {{"Global", "Arrosage", "OUI"}}}
local courtarrosage = {"If", {{"Global", "Arrosage", "PREPARATION"}}}
GEA.add(id["ARROSAGE"], 3*60*60, "", {{"turnOff"}, longarrosage, {"Global", "Arrosage", "NON"}})
GEA.add(id["ARROSAGE"], 30*60, "", {{"turnOff"}, courtarrosage, {"Global", "Arrosage", "NON"}})
 

 

Voilà ,en gros, c'est tout. Si tu as besoin de quoi que ce soit (virtuel device ou autre) hurle.

Lien vers le commentaire
Partager sur d’autres sites

Gwendal, je t'aurais bien proposé de te l'acheter, moyennant les frais de port, mais à  mon avis Xtrem57 est passé chercher la dernière dès que j'ai mis l'info.

 

Autre chose, je vais faire mon boulet, analphabète du codage, mais chez moi, je n'ai aucun retour sur le module passerelle.

 

Tout reste à  0

 

J'ai vu qu'il y avais des log dans le code PHP, comment peut on vérifier qu'il fonctionne bien. En clair, est ce que je l'ai bien configuré ?

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...