Aller au contenu
Steven

Pluviométrie Avec Netatmo

Recommended Posts

PLUVIOMETRIE (ET ARROSAGE) AVEC NETATMO

firmware 4.x seulement

 
Partie 1 : récupérer l'historique
 
Netatmo est une station météo sur laquelle vous pouvez brancher un "pluviomètre" de la même marque. Afin d'exploiter les données de ce pluviomètre et vous pouvez utiliser l'application Netatmo ou son site web. Vous pouvez aussi installer le plugin Netatmo fourni par Fibaro. Ce dernier vous affichera uniquement les données à  l'instant précis ou vous être entrain de le regarder.
 
Nous, nous voulons allez plus loin, nous voulons connaitre les quantités de pluie ayant eu lieu depuis : 1 jour, 1 semaine, 1 mois, cela dans l'optique de pouvoir gérer correctement notre arrosage.
 
Pour ce faire, il existe un grand nombre de script PHP, Google Script qui permet de gérer cela .. mais ... depuis la v4.x, Fibaro nous fait bénéficier de la librairie net.httpClient dans une scène et cette librairie nous permet de récupérer des données via HTTPS, ce qui auparavant n'était pas possible depuis notre HC2. Alors vu que nous avons, aujourd'hui, tout le nécessaire pour attaquer notre Netatmo directement depuis notre HC2, pourquoi s'en priver  :)
 
Les données recueillies par votre Netatmo sont mis à  diposition via des API que vous pouvez interroger quand bon vous semble à  la seul condition d'avoir un compte Développeur Netatmo (ne vous inquiéter pas, vous n'aurez pas beson de développer, ni de répondre à  des questions étranges).
 
Pour vous inscrire, c'est donc ici : https://auth.netatmo.com/fr-FR/access/signup
 
Suite à  votre enregistrement, vous allez obtenir :

  • un id (exemple : 45b1931d19665803515b571c)
  • un code secret (exemple : lyRkJXZLIM8xShACtmQjsCQV4U3djL08Zq1hUStbUJ4)

Ces informations + votre login et mot de passe vont permettre d'accéder à  vos informations.
 
Voici donc le script nécessaire, à  vous de l'importer dans une nouvelle scène et de modifier les 4 premières lignes.

local n_client_id = "45b1931d19665803515b571c"
local n_client_secret = "lyRkJXZLIM8xShACtmQjsCQV4U3djL08Zq1hUStbUJ4"
local n_username = "______________@_____.com"
local n_password = "password"

local hc2_module_virtuel = 139  -- le module virtuel "Pluie"

local debug = true -- affiche ou non les message dans la console

local long_lat_adjust = 0.1 -- ajustement de la distance pour trouvé un pluviomètre

local version = 2.0

-- ------------------------------------------------------------------------
--   NE PAS TOUCHER
-- ------------------------------------------------------------------------
local force_use_rain_public = false
local loc = api.get("/settings/location")
local lat_ne = loc.latitude + long_lat_adjust
local lon_ne = loc.longitude + long_lat_adjust
local lat_sw = loc.latitude - long_lat_adjust
local lon_sw = loc.longitude - long_lat_adjust

local token = ""
local int_id = ""
local ext_id = ""
local ext_bat = 0
local rain_id = ""
local rain_bat = 0

local temperature_interieure = -1000
local temperature_exterieure = -1000
local co2 = -1000
local humidite_interne = -1000
local humidite_externe = -1000
local pression = -1000
local bruit = -1000
local rains = {hour = -1000, day = -1000, week = -1000, month = -1000}

-- ------------------------------------------------------------------------
-- Exécuté après chaque requète HTTP
-- ------------------------------------------------------------------------
function afterHttpRequest()
	if (temperature_interieure > -1000) then end
	if (temperature_exterieure > -1000) then end
	if (co2 > -1000) then end
	if (humidite_interne > -1000) then end
	if (humidite_externe > -1000) then end
	if (pression > -1000) then end
	if (bruit > -1000) then end
	if (rains["hour"] > -1000) then 
    	if (rains["hour"] == -1) then 
      		fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblHeure.value", "n/a") 
     	else
    		fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblHeure.value", " "..rains["hour"]) 
     	end
  	end
	if (rains["day"] > -1000) then 
    	if (rains["day"] == -1) then 
      		fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblJour.value", "n/a")
      	else
    		fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblJour.value", " "..rains["day"])
    	end
    end
	if (rains["week"] > -1000) then 
  		if (rains["week"] == -1) then 
    		fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblSemaine.value", "n/a")
    	else
  			fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblSemaine.value", " "..rains["week"])
  		end
    end
	if (rains["month"] > -1000) then 
		if (rains["month"] == -1) then 
			fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblMois.value", "n/a")
		else
			fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblMois.value", " "..rains["month"])
		end
   	end
end

-- ------------------------------------------------------------------------
-- Affichage dans la console
-- ------------------------------------------------------------------------
function log(message, force)
  	force = force or false
	if (debug or force) then
		print(__convertToString(message))
   	end
end

-- ------------------------------------------------------------------------
-- Retourne le niveau de batterie en pourcent
-- ------------------------------------------------------------------------
function calcBat(bat, ext)
	local max = 6000
    local min = 4200 
    if (ext) then
       max = 6000
       min = 3600      
    end
    if (bat > max) then bat = max end
    return math.floor(bat * 100 / max)
end

-- ------------------------------------------------------------------------
-- Arrondi
-- ------------------------------------------------------------------------
local function roundToNthDecimal(num, n)
  local mult = 10^(n or 0)
  return math.floor(num * mult + 0.5) / mult
end

-- ------------------------------------------------------------------------
-- Interrogation de l'API
-- ------------------------------------------------------------------------
function getResponseData(url, body, func)
	local http = net.HTTPClient()
	http:request(url, { 
		options = { 
			method = 'POST', 
        	headers = {
				["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"
			},
			data = body
		},
		success = function(response) 
			func(json.decode(response.data)) 
			afterHttpRequest()
		end,
		error = function(response) log(" ERROR !!! " .. url, true) end,
	})   
end

-- ------------------------------------------------------------------------
-- Mesures de l'unité interne
-- ------------------------------------------------------------------------
function getMesuresInt()
	getResponseData("https://api.netatmo.net/api/getmeasure","access_token="..token.."&device_id="..int_id.."&scale=max&type=Temperature,CO2,Humidity,Pressure,Noise&date_end=last", 
		function(data)
			log("----------========== Module intérieur ==========----------")
			temperature_interieure = data.body[1].value[1][1]
			co2 = data.body[1].value[1][2]
			humidite_interne = data.body[1].value[1][3]
			pression = data.body[1].value[1][4]
			bruit = data.body[1].value[1][5]
			log("temperature_interieure = " .. temperature_interieure)
			log("co2 = " .. co2)
			log("humidite_interne = " .. humidite_interne)
			log("pression = " .. pression)
			log("bruit = " .. bruit)
		end
	)
end
 
-- ------------------------------------------------------------------------
-- Mesure de l'unité externe
-- ------------------------------------------------------------------------
function getMesuresExt()
	getResponseData("https://api.netatmo.net/api/getmeasure","access_token="..token.."&device_id="..int_id.."&module_id="..ext_id.."&scale=max&type=Temperature,Humidity&date_end=last", 
		function(data)
			log("----------========== Module extérieur ==========----------")
			temperature_exterieure = data.body[1].value[1][1]
			humidite_externe = data.body[1].value[1][2]
			log("temperature_exterieure = " .. temperature_exterieure)
			log("humidite_externe = " .. humidite_externe)
		end
	)
end

-- ------------------------------------------------------------------------
-- Obtention des informations sur un pluviomètre proche
-- ------------------------------------------------------------------------
function getRainNear()
	getResponseData("https://api.netatmo.net/api/getpublicdata","access_token="..token .. "&lat_ne="..lat_ne.."&lon_ne="..lon_ne.."&lat_sw="..lat_sw.."&lon_sw="..lon_sw, 
		function(data)
      		--log(data)
      		rains["week"] = -1
      		rains["month"] = -1
      		rains["hour"] = -1
      		rains["day"] = -1
			log("----------==========     D  e  v  i  c  e  s    =========----------")
      		for _, v in pairs(data.body) do
              for l, w in pairs(v.measures) do
                  if (type(w.rain_24h) ~= "nil") then
            		rains["day"] = w.rain_24h
            		rains["hour"] = w.rain_60min
                  end
              end
        	end
      		if (rains["day"] == -1000) then
        		log("Impossible de trouver un pluviomètre à  proximité, augmentez [long_lat_adjust]", true)
        	else
               log("Pluie jour : " .. rains["day"])
               log("Pluie heure : " .. rains["hour"])
	       	end
		end
    )
end

-- ------------------------------------------------------------------------
-- Mesure du détecteur de pluie historique
-- ------------------------------------------------------------------------
function getMesuresRain(duree, variable)
	local now = os.time();
	getResponseData("https://api.netatmo.net/api/getmeasure","access_token="..token.."&device_id="..int_id.."&module_id="..rain_id.."&scale=1hour&type=sum_rain&real_time=true&date_begin="..os.date("!%c", (now - duree)), 
		function(data)
      		log("----------========== Pluie histo ==========----------")
			local cumul  = 0
            for k, v in pairs(data.body) do
              for l, w in pairs(v.value) do
                  cumul = cumul + w[1]
              end
            end
      		cumul = roundToNthDecimal(cumul, 2)
			rains[variable] = cumul
			log("rain["..variable.."] = " .. rains[variable])
		end
	)
end

-- ------------------------------------------------------------------------
-- Obtention des informations sur les devices
-- ------------------------------------------------------------------------
function getDevices()
	getResponseData("https://api.netatmo.net/api/devicelist","access_token="..token, 
		function(data)
			log("----------==========     D  e  v  i  c  e  s    =========----------")
      		for _, v in pairs(data.body.modules) do
       			if (v.data_type[1] == "Rain") then
           			rain_id = v._id
           			rain_bat = calcBat(v.battery_vp, true)
          		else
          			ext_id = v._id
          			ext_bat = calcBat(v.battery_vp, true)
           		end
        	end
      		int_id = data.body.devices[1]._id
      		getMesuresInt()
			getMesuresExt()
      		if (rain_id ~= "" and not force_use_rain_public) then
      			getMesuresRain(60 * 60, "hour")
      			getMesuresRain(60 * 60 * 24, "day")
      			getMesuresRain(60 * 60 * 24 * 7, "week")
      			getMesuresRain(60 * 60 * 24 * 30, "month")
        	else
        		getRainNear()
        	end
		end
    )
end

-- ------------------------------------------------------------------------
-- Authentification
-- ------------------------------------------------------------------------
function auth(nextFunction)
	local request_body = "grant_type=password&client_id=" .. n_client_id .. "&client_secret=" .. n_client_secret .. "&username=" .. n_username .. "&password=" .. n_password .. "&scope=read_station"
	getResponseData("https://api.netatmo.net/oauth2/token", request_body, 
    	function(data) 
			token = data.access_token
      		log(token)
        	nextFunction()
		end
	)
end
    
auth(getDevices)
log("Last request : "  .. os.date("%x - %X"), true)

 
si vous avez l'âme d'un développeur ou d'un aventurier, la méthode à  modifier est afterHttpRequest() sinon, rendez-vous au post suivant.

P.S. Merci à  @PITP2 pour son support.
 
 
Edit : nouvelle version du script. Si ce dernier détecte que vous n'avez pas de pluviomètre, il va rechercher un pluviomètre à  proximité de chez vous (uniquement les relevés de la dernière heure et jour). La distance de recherche peux être adaptée en ajustant la variable long_lat_adjust (0.1 par défaut). Il s'agit du cercle de recherche en latitude/longitude autour de chez vous.

  • Upvote 4

Partager ce message


Lien à poster
Partager sur d’autres sites

Partie 2 : Récupérer les prévisions des 3 prochains jours

 

logo-responsive.png

Le post précédent nous fournis une scène qui permet d'aller consulter notre pluviomètre Netatmo et de voir combien de "mm" il y a plu ... mais si pas exemple, on veut gérer son arrosage, il faut aussi connaitre les prévisions de pluie.

 

Pour ceci, personnellement, j'aime bien le site Wundeground car il est rapide, disponible et assez simple.

 

Donc si vous aussi vous souhaitez allez plus loin, il va vous falloir que vous créez un compte sur Wunderground et précisez le lieu géographique où vous êtes.

 

Pour crée un compte : http://www.wunderground.com/weather/api/d/login.html

Pour trouver sa "station ID" : http://www.wunderground.com/weatherstation/ListStations.asp?selectedCountry=France

 

La création du compte va vous permettre d'obtenir une "cle api" (exemple : 58096c9e567edfb1)

Et la recherche de la station la plus proche de chez vous, une station ID (exemple : IAINTHOI2)

 

Avec ces 2 informations, nous allons pouvoir récupérer les prévisions des 3 prochains jours :

 

Le script ci-dessous doit être inclus dans un module virtuel (voir le post suivant avant de faire quoi que ce soit) :

local max_day = 3 -- 3 par défaut
local cle_api = "58027c8e567edfb1" -- cle api de chez Wunderground
local pws = "IAINTHOI2" -- station ID 
local scene_netatmo = 294 -- id de la scène 

fibaro:startScene(scene_netatmo)

local WGROUND = Net.FHttp("api.wunderground.com",80)
local response ,status, err = WGROUND:GET("/api/"..cle_api.."/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)
  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Partie 3 : On vous a mâché le travail :)
 
En effet, votre script de récupération de l'historique de votre pluviomètre a été installé et testé (post #1) ?
Vous souhaitez connaitre les prévisions des 3 prochains jours et avez créé votre compte sur Wunderground (post #2) ?
 
Alors voici le module virtuel que vous allez devoir importer (Pluie.vfib)
 
Ce module virtuel va regrouper les données historiques et futurs dans une seule interface :
 
293280Pluie.png
 
Pour le faire fonctionner correctement, il va falloir modifier 2 ou 3 choses.

  • Importer ce module et noté son ID 
  • Modifier la scène précédemment créée (voir post #1) et modifier la ligne suivante 
    local hc2_module_virtuel = 139 -- id du module virtuel
    
  • Modifier le module virtuel
    • Derrière le bouton "Prévision"
      local scene_netatmo = 294 -- id de la scène 
      local max_day = 3 -- 3 par défaut
      local cle_api = "49017e9e567edfb1" -- cle api de chez Wunderground
      local pws = "IAINTHOI2" -- station ID 
    • Derrière le bouton "Calcul"
      ATTENTION, c'est ici qu'aurons lieu VOS calculs, je vous laisse donc mon code comme exemple. Dans mon cas, je ne fais que de modifier une variable global "Arrossage" qui peut recevoir 3 valeurs :
      NON : rien à  faire
      PREPARATION : arrossage de courte durée pour préparer le terrain a des pluies avenir
      OUI : gros arrosage car pas de pluie prévue
    • Dans le main loop
      Vous pouvez mettre le code suivant pour appuyer sur les boutons toutes les 10 minutes. Dans mon cas, j'utilise GEA
      fibaro:call(fibaro:getSelfId(), "pressButton", "7")
      fibaro:sleep(3000) -- on attend 3 secondes
      fibaro:call(fibaro:getSelfId(), "pressButton", "9")
      -- dodo pendant 10 minutes
      fibaro:sleep(10*60*1000) 

Voilà , vous avez tout ce qu'il faut pour gérer votre arrosage. Ce n'est plus qu'à  vous de jouer.

Pluie.vfib

  • Upvote 5

Partager ce message


Lien à poster
Partager sur d’autres sites

Vraiment top ce module.

Merci Steven

 

EDIT ; Je me demandais, pour faire profiter la communauté, si il n'était pas possible de partager les données de son pluviomètre ? pour peu qu'on trouve qq'un du fofo pas trop loin de chez nous ?

 

donc je cherche quelqu'un de sympa, en region parisienne (idéalement proche de SAINT GERMAIN EN LAYE),   :D, qui voudrait bien partager un accès en MP

je paye en bière :-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Je peux te donner accès mais Luxembourg et Saint Germain en Laye , c'est pas top près

Partager ce message


Lien à poster
Partager sur d’autres sites

rien que pour tester le boulot de steven je veux bien ;-)

en attendant que je commande le mien.

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

trop cool  :13:

 

EDIT : ca marche très bien, j'ai conservé pour le moment les equations de steven, je vais affiner si besoin

 

ca serait pas mal d'afficher le 'msg' dans le bouton de VD ?

je croyais que la fonction était bien celle ci

fibaro:call(selfId, "setProperty", "ui.Label7.value", msg)

mais rien ne s'affiche ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour l'équation :

 

 

En fait pour calculer l'évaporation on pourra en théorie prendre la loi de Dalton .

 

Une petite explication

 

Selon la loi de Dalton le taux d'évaporation d'un plan d'eau s'exprime en fonction du déficit de saturation (quantité d'eau (ps-pe) que l'air peut stocker, ce qui correspond à  la sécheresse de l'air), et de la vitesse du vent. Cette loi est formulée selon la relation suivante:

E=k.f(u).(ps–pe)

 

 

E=k.f(u).(ps–pe)

 

 

  • E le taux d'évaporation en (mm/jour)
  • pe la pression effecive ou réelle de vapeur d'eau dans l'air en kPa
  • ps la pression de vapeur saturante ou tension de vapeur à  la température de la surface évaporante en kPa
  • ​k est une constante
  • f(u) le facteur de proportionnalité, dépendant de la vitesse du vent u en m/s

 

Donc :

La pression de vapeur saturante (ou tension de vapeur) est la pression à  laquelle la phase gazeuse d'une substance est en équilibre avec sa phase liquide ou solide à  une température donnée dans un système fermé. Elle dépend de la température : La pression de vapeur saturante augmente avec la température. Une substance possédant une pression de vapeur saturante élevée à  température ambiante est dit volatile​.

La relation de Dalton exprime aussi que, en théorie et dans des conditions de pression et de température données, le processus d'évaporation est possible jusqu'à  ce que la pression de vapeur effective atteigne une limite supérieure qui n'est autre que la pression de vapeur 
saturante (ps-pe soit positif) alors que l'évaporation cesse dès que

 

ps = pe.

 

Rayonnement solaire et température de la surface évaporante 

 

Le rayonnement solaire est l'élément moteur de la vaporisation de l’eau en augmentant la température de la surface évaporante. Le taux d'évaporation est ainsi une fonction croissante de la température de l'eau. 
 Etant donné que la température de l'eau varie dans le même sens que la température de l'air,  la température de l'air plutôt que celle de l'eau est utilisée dans les formules de calcul.
Ainsi la pression de vapeur saturante ps augmente avec la température selon la relation suivante (avec t en ° Celsius et ps en kPa) : 

ps=0,611exp(17,27.t/(237,3+t))

Ainsi une température élevée augmente la pression de vapeur saturante, ce qui, suivant la loi de Dalton, favorise l’évaporation de l’eau. 

 

Humidité relative de l'air

L'humidité relative est le rapport entre la pression partielle de vapeur d'eau et la pression de vapeur saturante pour une température et un volume d'air donnés:

Hr(%)=100  pe  ps  

avec :
pe : pression effective ou réelle de vapeur d'eau dans l'air [kPa],
ps : pression de vapeur d'eau saturée (ou tension de vapeur) à  la température de la surface évaporante [kPa],

 Il arrive à  un moment donné qu'une masse d'air soit saturée en vapeur d'eau mais pas tout le temps ; l'humidité relative est donc, à  une température donnée, le rapport entre la quantité effective d'eau contenue dans une masse d'air et la quantité maximale d'eau que peut contenir cette masse d'air. Ainsi, lorsqu'une masse d'air se refroidit, elle garde la même quantité d'eau. Par contre, la quantité maximale d’eau qu’elle peut contenir diminue avec la température et son humidité relative augmente. Cette diminution implique qu'à  un certain moment, l'air devient saturé car Hr = 100%.

 

 Vent

Le vent joue un rôle essentiel sur les processus d'évaporation. En effet, l'air au voisinage de la surface évaporante se sature plus ou moins rapidement et peut arrêter le processus d'évaporation.L'air saturé est remplacé par de l'air plus sec au voisinage de la surface évaporante en raison des mélanges et mouvements créés par le vent. Ainsi de nombreuses corrélations existent permettant d’estimer l’influence de la vitesse du vent. 

Pour tenir compte du vent, l'image  qui suit évalue un coefficient multiplicateur k à  appliquer à  la valeur de la vitesse d'évaporation par vent nul (Ve). Ainsi quand on double la vitesse du vent, on double la vitesse d’évaporation, ce qui montre l’importance du vent pour réaliser l’évaporation. 

Le facteur multiplicateur f(u),  est une fonction linéaire de la vitesse du  vent et doit être appliqué au taux d’évaporation estimé pour un vent nul.On obtient alors la formule simple suivante pour déterminer la vitesse d’évaporation : 

Vitesse d’évaporation = Ve (sans vent) x k (dépendant du vent) 

Ve (sans vent) étant déterminé sur les courbes d’allures exponentielles 

k étant déterminé sur la courbe linéaire 

 

21meyx2.png

 

 

 

En première approche, le facteur de proportionnalité de la formule de Dalton (dépendant de la vitesse du vent u [m/s]) peut s’exprimer ainsi : 

f(u)=1+0,6u

 avec u : vitesse du vent [m/s] 

 

La formule de Dalton peut donc être reformulée par la formule de Rohwer:

E=0.484.f(u).(ps−pe)

Soit en remplaçant par les paramètres développés ci-dessus, on obtient:

E=0,484.(1+0,6u)exp(17,27.t/(237,3+t)).(1–Hr/100)

avec : 
u (m/s) la vitesse du vent
t (°C) la température ambiante
Hr (%) l'humidité relative de l’air

Sans tenir compte du facteur de proportionnalité f(u) lié à  l’effet du vent, l’évolution du taux d’évaporation (en mm/jour) d’un plan d’eau pure en fonction de la température (°C) et de l’humidité relative (%) est représentée ici :

 

 

e5l0yg.png

 

 

 

On constate la très grande importance de la température  et de l’humidité relative sur l'évaporation. Plus l'humidité relative est faible et la température est élevée, plus l'évaporation est élevée.

 

 

En théorie c'est ca , mais dans notre cas , comme les températures se situe entre 10 et 30 degrès en générale , on pourra pour faciliter rendre l'équation plus linéaire.

Partager ce message


Lien à poster
Partager sur d’autres sites

avec le module ext de la netatmo on a l'humidité relative et la temperature ext. (prevision avec weahterU)

le vent on la aussi il me semble depuis la HC2 non ? ou depuis WeatherU surement

`

on doit avoir toutes les donnée pour calculer le besoin ..

Partager ce message


Lien à poster
Partager sur d’autres sites

@Sakkhoo

Avec Netatmo, je ne pourrais que te donner les relevé de pluviométrie du jour et de l'heure en cours a proximité de chez toi. 

 

  • "05:00:00:00:bd:f6":{
    • "rain_24h":13.938,
    • "rain_timeutc":1430405115,
    • "rain_live":0,
    • "rain_60min":0.303
    },

Partager ce message


Lien à poster
Partager sur d’autres sites

Me plait bien tout ça, vais essayer de l'adapter avec mon pluviomètre Oregon. Mais pour cela il faut d'abord que je rapproche de la maison, qu'il soit de nouveau capté par ma Zibase.

Partager ce message


Lien à poster
Partager sur d’autres sites

Nouvelle version (2.0) du script (spécial Sakkhho) :

 

Edit : nouvelle version du script. Si ce dernier détecte que vous n'avez pas de pluviomètre, il va rechercher un pluviomètre à  proximité de chez vous (uniquement les relevés de la dernière heure et jour). La distance de recherche peux être adaptée en ajustant la variable long_lat_adjust (0.1 par défaut). Il s'agit du cercle de recherche en latitude/longitude autour de chez vous.

Partager ce message


Lien à poster
Partager sur d’autres sites

Enorme !

Comment fonctionne le calcul si pas de data 7 et 30 jours ? c'est ok aussi ou je dois corriger qq chose ?

 

 

En tout cas, ça fonctionne bien car il me trouve ca

 

 


[DEBUG] 18:18:16: ----------========== D e v i c e s =========----------
 
[DEBUG] 18:18:16: Pluie jour : 8.686

[DEBUG] 18:18:16: Pluie heure : 0.303

Partager ce message


Lien à poster
Partager sur d’autres sites

Le calcul, c'est àtoi de l'adapté par rapport àtes données. Je suis entrain de regarder par rapport àla formule de fuuss.

Partager ce message


Lien à poster
Partager sur d’autres sites

enoooorme, excellent steven, un grand merciiii ;-) superbe

 

Je n'ai pas de netatmo ni de pluviometre pour l'instant, alors je vais utiliser uniquement la partie prevsion wundergrund ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Je pense que je vais faire évoluer cette partie pour ceux qui n'ont pas de Netatmo.

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,

 

j'ai elargit le cercle de recherche car je trouvais que la station que j'interrogeai était pas fiable.

quand je regarde sur weather pro ou weatherU, il était tombé plus de 20mm aujourdhui :-(

du coup en mettant 0.8 je tombe sur une station avec plus ou moins cette valeur.

Ca correspond à  quelle distance environ ?

 

Autre question, esthétique cette fois, sur la home page de la HC2; mon VD n'affiche rien, j'aimerai bien qu'il me remonte le "msg" comme dans le VD lui meme 

j'ai vu la ligne 

fibaro:call(selfId, "setProperty", "ui.Label7.value", msg)

pourquoi ca ne s'affiche pas ? c'est pourtant bien ca qu'il faut non ?

le push sur telephone est ok.

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est assez énorme car cela correspond à1.6 degré de latitude/longitude de distance de ta box :(

Partager ce message


Lien à poster
Partager sur d’autres sites

ok effectivement un peu large ... je vais réduire.

et pour l'affichage du resultat sur le module ? ca s'affiche chez toi ?

 

edit : steven, comme à  0h00 la "valeur 24h" issue de Netatmo repasse à  0, est ce qu'on pourrait pas stocker cette valeur ? et additionné cette valeur  sur 7 jours roulants ?

Semaine= V1+V2+V3 etc...

et quand on arrive à  V7, et bien la nouvelle valeurs reprends V1 ?

 

est ce faisable ?

car c'est vrai louper l'information semaine est dommage.

Partager ce message


Lien à poster
Partager sur d’autres sites

Sakkho,

 

J'utilise weather pro depuis en tout cas 5 ans. Au début je le trouvais fiable, mais depuis 1 an ou deux de moins en moins. Je profite de ce module virtual pour passer sur wunderground que je ne connaissait pas.

 

@ Steven: Est-il normal que les valeurs de la première ligne de ton virtual device ne corresponde pas avec le reste des valeurs affichées ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@Bouliboule

Il y a quelques semaine, j'avais un script google qui allait chercher les infos de ma Netatmo et qui allait mettre à  jour un module virtuel avec TOUTES les valeurs possible. Ce module virtuel mettait à  jour des petits modules virtuels (un pour l'extérieur, un pour l'intérieur, un pour la pluie, ...) et c'est donc lui qui mettait à  jour la 1ère ligne.

 

Et ben, j'ai complètement oublié de géré cette ligne :(

 

Pour corriger cela, je vous propose de mettre le code suivant dans le main loop :

local sId = fibaro:getSelfId()

fibaro:call(sId, "pressButton", "7")

fibaro:sleep(3*1000)
local j = fibaro:getValue(sId, "ui.lblJour.value")
local s = fibaro:getValue(sId, "ui.lblSemaine.value")
local m = fibaro:getValue(sId, "ui.lblMois.value")
local msg = string.format("[24h] %s, [7j] %s, [30j] %s", j, s, m)
fibaro:debug(msg)
fibaro:call(sId, "setProperty", "ui.lblAll.value", msg)

fibaro:call(sId, "pressButton", "9")
-- dodo pendant 10 minutes
fibaro:sleep(10*60*1000)

Partager ce message


Lien à poster
Partager sur d’autres sites

Chuis chiant hein !

 

En tout cas avec les pluies de ce matin je regarde mon VD et tout fonctionne à  merveille, les valeurs collent parfaitement maintenant.

Partager ce message


Lien à poster
Partager sur d’autres sites

existe il un moyen de renvoyer le message àla ligne, car c'est vrai ici mais aussi dans pas mal de mes VD, le label est tronqué car trop long.

Partager ce message


Lien à poster
Partager sur d’autres sites

×