Aller au contenu
Steven

Pluviométrie Avec Netatmo

Recommended Posts

Fibaro ne remonte (de mémoire) que la pluviométrie à  l'instant présent donc aucun cumul sur l'heure/jours/...

 

Envoi moi ton code (sans les identifiants) si tu veux que je jette un  :3:.

Partager ce message


Lien à poster
Partager sur d’autres sites

La partie que j'ai gardée de ton code fonctionne parfaitement.

 

Pour ce qui est de l'exploitation des remontées Fibaro, voilà  ce que je fais.

--[[
%% properties
302 value
%% events
302 value
%% globals
--]]

v = fibaro:getValue(302, "value")

fibaro:debug(v);

Plus simple tu peux pas :D

 

Et voilà  les résultats

 

post-1115-0-89710400-1470323656_thumb.jpg

 

Cumulé ça donne 1.4 mais en fait c'est 2.9

Partager ce message


Lien à poster
Partager sur d’autres sites

Normal, les scènes ne sont "triggée" que lorsqu'il y a un changement de valeur donc si tu as 2 fois  0.101mm de suite, elle ne t'enverra que la 1ère.

 

Ce n'est donc pas une solution viable.

Partager ce message


Lien à poster
Partager sur d’autres sites

Entièrement d'accord pour les trigger, mais les résultats semblent quand même étranges.

On se demande aussi à  quoi sert ce device ?

 

Pourquoi ne pas avoir mis dans la config des options du genre

- remonter la pluviométrie de la dernière heure

-remonter la pluviométrie de la dernière journée

- etc ...

 

Enfin, que des infos disponibles chez Netatmo.

Mais bon, c'est Fibaro et on ne les refera pas.

 

PS: Pour ceux que ça peut interresser:

Pour la valeur "day", tu remontes les dernières 24h, moi je voulais depuis minuit, j'ai donc fais la modif suivante:

if (rain_id ~= "" and not force_use_rain_public) then
      getMesuresRain(60 * 60, "hour")
      local d = os.date("*t");           -- debub modif
      local t = 3600*d.hour + 60*d.min;
      getMesuresRain(t, "day")           -- fin modif
  --	getMesuresRain(60 * 60 * 24, "day")
      getMesuresRain(60 * 60 * 24 * 7, "week")
      getMesuresRain(60 * 60 * 24 * 30, "month")
 end
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est vrai que ce device est assez inutile, c'est d'ailleurs à  cause/ou grâce à  lui que j'ai fait ce script. Il permet juste de savoir s'il pleut ou pas.

 

Perso, j'en avais besoin pour l'arrosage du jardin, j'avais donc besoin d'avoir des moyennes et non pas l'instant présent. Arrosage que j'ai toujours pas mis en place d'ailleurs. C'est un peu comme quand tu as tout les legos, le mode d'emploi et envie débordante du résultat ... mais la flemme de rassembler les pièces  ;)

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir 

j ai posté plusieurs demande sur le forum pour trouver la ligne pour l api car sur ce module j ai ce message d erreur 

[DEBUG] 19:23:22: Last request : 10/24/17 - 19:23:22
[DEBUG] 19:23:22: ERROR !!! https://api.netatmo.net/oauth2/token

cela vient sûrement du token mais je sais plus comment faire pour le recuperer

merci encore

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello j'ai aussi cette erreur:

 

[DEBUG] 13:07:25: Last request : 09/10/18 - 13:07:25
[DEBUG] 13:07:25: 570cbcb3acb39bfb230212ce|8724fa5200da3e2011df2f6c2c7fda0a
[DEBUG] 13:07:26: ----------========== D e v i c e s =========----------
[DEBUG] 13:07:26: 05:00:00:03:c2:c6
[DEBUG] 13:07:26: ----------========== Module extérieur ==========----------
[DEBUG] 13:07:26: temperature_exterieure = 24.5
[DEBUG] 13:07:26: humidite_externe = 51
[DEBUG] 13:07:26: ----------========== Pluie histo ==========----------
[DEBUG] 13:07:26: [1;31m2018-09-10 13:07:26.663855 [ fatal] LUA error: /opt/fibaro/scenes/88.lua:223: bad argument #1 to 'pairs' (table expected, got nil)

 

Comment on peu résoudre ce problème?

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

hello @Steven

 

il y a effectivement depuis la 4.5x un problème avec la requête netatmo ?

 

[DEBUG] 08:34:04: 2019-02-02 08:34:04.484586 [ error] Handshake error: certificate verify failed
[DEBUG] 08:34:04: ERROR !!! https://api.netatmo.net/oauth2/token

 

tu sais dire ce qu'il faut faire pour corriger la scène ?

Partager ce message


Lien à poster
Partager sur d’autres sites

edit : corrigé, 

 

suffit de rajouter le 

checkCertificate = false

dans la requête POST

local selfhttp = net.HTTPClient({timeout=2000})
url = 'some.url.com'
selfhttp:request(url, {
    options={
	checkCertificate = false,
	method = 'GET'
    }
...

 

merci @tinman

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjur

 

This script still work?

 

i get error

 

[DEBUG] 09:51:44: 2019-03-17 09:51:44.813505 [ fatal] Unknown exception: /opt/fibaro/scenes/2881.lua:130: '}' expected (to close '{' at line 125) near 'data'

 

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

To get the NETATMO data  from your device it works - the issue is the forecast. WU does not work anymore.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour à tous,

 

J'ai finalement investi dans la station météo et le pluviomètre. Reçu il y a 48h. :60:

 

Tout marchait très bien sauf depuis 2 heures environ. :wacko:

 

Je ne sais pour quelle raison, toutes les valeurs rains hour, Day, week, month, ont la même valeur, celle de month en fait. Je n'ai évidemment rien changé. J'ai malheureusement effacé les logs (pensant à un problème de scène) mais on voit bien que je passe des mesures différenciées en fonction du temps, à toutes les mêmes valeurs, depuis 2 heures :

[DEBUG] 18:51:18: humidite_externe = 66
[DEBUG] 18:51:18: ----------========== Pluie histo ==========----------
[DEBUG] 18:51:18: rain[hour] = 15.15
[DEBUG] 18:51:18: ----------========== Pluie histo ==========----------
[DEBUG] 18:51:18: rain[day] = 15.15
[DEBUG] 18:51:18: ----------========== Pluie histo ==========----------
[DEBUG] 18:51:18: rain[month] = 15.15
[DEBUG] 18:51:18: ----------========== Pluie histo ==========----------
[DEBUG] 18:51:18: rain[week] = 15.15

Sur le site, j'ai le bon relevé du pluviomètre qui fonctionne toujours.

2084261925_Capturedcran2019-06-1318_59_49.png.33c0f1aa10062e13a817edfee4117ce1.png

 

Quand je fais la requête dans le navigateur, j'obtiens ça 

{"body":[{"beg_time":1560265200,"step_time":3600,"value":[[0.808],[5.656],[2.525],[0],[0.808],[0.303],[0],[0],[0],[0],[0],[0],[0],[0],[0.505],[0.101],[0],[0],[0.303],[1.01],[1.818],[0.808],[0],[0],[0.101],[0.404],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]]}],"status":"ok","time_exec":0.087869882583618,"time_server":1560447237}

Donc apparemment les mesures restent bien différenciées du côté de l'api. Mais là ça dépasse grandement mon niveau débutant de programmation.

C'est déjà arrivé à qqun ? C'est l'api Netatmo qui a changé et du coup le script ne marche plus ?

 

Merci d'avance pour vos lumières.

 

Modifié par pedia
  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Finalement je me réponds. Ils ont bien changé quelque chose. J'ai remplacé la requête par ça

	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((now - duree)), 

Le format de date a semble t'il changé. J'ai juste enlevé le format :"!%c" os.date qui était avant os.date("!%c", (now - duree)) et ça remarche :

[DEBUG] 19:52:16: ----------========== Pluie histo ==========----------
[DEBUG] 19:52:16: rain[hour] = 0
[DEBUG] 19:52:16: ----------========== Pluie histo ==========----------
[DEBUG] 19:52:16: rain[month] = 15.15
[DEBUG] 19:52:16: ----------========== Pluie histo ==========----------
[DEBUG] 19:52:16: rain[48h] = 6.16
[DEBUG] 19:52:16: ----------========== Pluie histo ==========----------
[DEBUG] 19:52:16: rain[week] = 15.15
[DEBUG] 19:52:16: ----------========== Pluie histo ==========----------
[DEBUG] 19:52:16: rain[day] = 0

Par contre ça ne pousse pas vers le VD qui reste pour le moment sur les mêmes valeurs 15.15. 

Ça marche en fait très bien, un vulgaire problème de rafraîchissement de page du navigateur :

1580031580_Capturedcran2019-06-1320_04_12.png.29276ff158be2f3c94afea8f13e96e8f.png

 

J'en profite. Dans l'application Netatmo il y a les prévisions de pluviométrie données WeatherPro apparement qui me narguent... Il n'y a vraiment aucune possibilité pour le moment de les récupérer ?

 

 

Modifié par pedia
  • Like 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour la modif. J'avais aussi la même valeur dans les 3 champs.

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour WeatherPro, il y a déjà d'autres VD de disponible sur le forum.

Envoyé de mon SM-G935F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello, 

J'ai configuré la scène en modifiant le "checkCertificate = false", cependant j'ai toujours un plantage.

 

Voici le debug :

[DEBUG] 17:49:55: Last request : 04/22/20 - 17:49:55
[DEBUG] 17:49:56: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[DEBUG] 17:49:56: ----------========== D e v i c e s =========----------
[DEBUG] 17:49:56: ----------========== Module intérieur ==========----------
[DEBUG] 17:49:56: temperature_interieure = 21.7
[DEBUG] 17:49:56: co2 = 476
[DEBUG] 17:49:56: humidite_interne = 45
[DEBUG] 17:49:56: pression = 1012.5
[DEBUG] 17:49:56: bruit = 52
[DEBUG] 17:49:56: ----------========== Module extérieur ==========----------
[DEBUG] 17:49:56: 2020-04-22 17:49:56.786047 [ fatal] LUA error: /opt/fibaro/scenes/16.lua:162: attempt to index field '?' (a nil value)

 

 

La ligne 162 contient ceci :       temperature_exterieure = data.body[1].value[1][1]

 

 

Des idées ?

 

Modifié par Yorino

Partager ce message


Lien à poster
Partager sur d’autres sites

Je me suis permis de modifier le code de la scène pour l'adapter, je n'interroge donc que le module pluie et uniquement lui.

J'ai viré l'info de l'état de batterie.

Et tout ceci remonte donc dans le module virtuel pluie.

 

2 autres modifs pour que la scène fonctionne :

- La non vérification du certificat : method = 'POST', checkCertificate = false, 

- La modif de la requête part : 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((now - duree)), 

 

Je m'attaque à le modif du module désormais pour voir comment intégrer les prévisions autres que WU.

A+

 

local n_client_id = "xxxxxxxxxxxxxxxxxx"
local n_client_secret = "xxxxxxxxxxxxxxxxxxxxxxxx"
local n_username = "xxxxxx.xxxxx@xxxxx.xx"
local n_password = "xxxxxxxxx"

local hc2_module_virtuel = xxx  -- le module virtuel "Pluie"
local debug = true -- affiche ou non les message dans la console
local version = 2.1

-- ------------------------------------------------------------------------
--   NE PAS TOUCHER
-- ------------------------------------------------------------------------
local token = ""
local int_id = ""
local rain_id = ""
local rain_bat = 0
local rains = {hour = -1000, day = -1000, week = -1000, month = -1000}

-- ------------------------------------------------------------------------
-- Exécuté après chaque requète HTTP
-- ------------------------------------------------------------------------
function afterHttpRequest()
	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

-- ------------------------------------------------------------------------
-- 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', checkCertificate = false, 
        	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


-- ------------------------------------------------------------------------
-- 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)), 
	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((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         			
           		end
        	end
      		int_id = data.body.devices[1]._id
   
      		if (rain_id ~= "") 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)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

hello

je viens de me rendre compte mais je pense que cela est le cas depuis pas mal de temps qu'il y a une erreur maintenant dans la scene 

 

[DEBUG] 16:43:28: Last request : 01/02/22 - 16:43:27
[DEBUG] 16:43:28: Erreur requête serveur, response.status = 403
[DEBUG] 16:43:28: xxxxxx|xxxxxxxxx
[DEBUG] 16:43:29: ----------========== D e v i c e s =========----------
[DEBUG] 16:43:29: ----------========== Pluie historique ==========----------
[DEBUG] 16:43:29: rain[hour] = 0
[DEBUG] 16:43:29: ----------========== Pluie historique ==========----------
[DEBUG] 16:43:29: rain[day] = 0
[DEBUG] 16:43:29: ----------========== Pluie historique ==========----------
[DEBUG] 16:43:29: rain[week] = 4.14

pareil chez vous?

Partager ce message


Lien à poster
Partager sur d’autres sites

×