Aller au contenu

Pluviomètre Hc2


Zorro

Messages recommandés

Dans mon cas je veux seulement connaitre la quantité de pluie qui est tombé. Cela me permet de savoir s'il faut que j'arose le potager ou non. Actuellement, j'ai un pluviomètre "manuel" que je monitore àla mimine. Je tiens également un fichier excel des précipitations annuelle.

Du coup, je ne veux que connaitre la quantité d'eau qui est tombé. Je n'ai pas les mêmes contrainte que vous avec un arrosage automatique. Je pourrais effectivement utiliser la méthode de Nico qui consiste a utiliser la zibase comme passerelle mais ça me ferai un peu cher le pluviomètre. C'est pour ça que je veux faire intervenir la méthode "électronique". Maintenant ma question est pour les électroniciens : est ce que les entrées du capteur de porte fibaro sont assez sensible pour faire le job ?

Lien vers le commentaire
Partager sur d’autres sites

Pour le module rgb, ça m'intéresse moyennement car il nécessité le 220v. Ça limite un peu les lieux d'application.

Pour la Netatmo, c'est peut être plus envisageable. Faut que je vois son prix. En plus, on a un accès direct aux données via sa base. A voir. Par contre est-ce que le plugin Netatmo sera disponible pour la HCL ?

Lien vers le commentaire
Partager sur d’autres sites

Merci pour la précision ! Mais effectivement, ça ne change pas mon intérêt, voire ça le réduit encore puisque il me faudrait un transformateur pour l'utiliser.

Par ailleurs, j'ai regardé le prix de la Netatmo, et c'est pas donné ! En plus, je pensais qu'il y avait un écran comme sur une station classique mais non !

Du coup, je vais vraiment me tenter le bricolage d'Oregon PCR800 !

Lien vers le commentaire
Partager sur d’autres sites

  • 7 mois après...

Pour ceux qui veulent automatiser l'arrosage et qui n'ont pas la possibilité d'installer une électrovanne, il y a la nouvelle solution de KOUBACHI

 

http://www.koubachi.com/products/smart-watering/

 

En pré-commande à  199€ avec 20% de remise inclut, livraison prévue en été.

 

Un capteur (sur pile), une électrovanne (sur pile) et une gateway Internet.

Lien vers le commentaire
Partager sur d’autres sites

Hello,

J'ai fait un truc (mais je l'ai cassé donc ca sera pour plus tard) avec un RFXCOM et un Oregon Scientific PCR800. 

 

Bon le seul soucis c'est que mon PI se vautre avec Domoticz et que la résolution de la PCR800 est de l'heure :)

Lien vers le commentaire
Partager sur d’autres sites

Donc pour commencé, il faut comme annoncé un détecteur de pluie Netatmo qui va nous donner les quantités de pluie, ça c'est la partie facile. Ensuite il faut aller chercher chez Netatmo les derniers relevés de votre Station. Pour ceci, j'ai une petite scène qu'il faut importer chez vous puis modifier les 4 premières lignes.

 

Pour pouvoir remplir ces 4 lignes, il vous faut un compte chez Netatmo : https://auth.netatmo.com/fr-FR/access/signup

 

Voici le script. Je viens de le ré-ecrire en LUA pour ne plus avoir besoin de Google Script, soyez donc indulgent.

Avant d'aller plus loin, tester ce script et donner moi votre retour car s'il marche chez personne d'autre que chez moi, je dois revenir a l'ancienne méthode qui est plus compliquée.

local n_client_id = "11b1111d11111111111b111b"
local n_client_secret = "lyZkHXRLMO8xShAAtmQhsCQM4U3djL08Zq1hUStbUJ4"
local n_username = "______._____@_____.com"
local n_password = "password"

local hc2_module_virtuel = 135 -- on s'en fiche pour l'instant

local debug = true


-- ------------------------------------------------------------------------
--   NE PAS TOUCHER
-- ------------------------------------------------------------------------
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 end
	if (rains["day"] > -1000) then end
	if (rains["week"] > -1000) then end
	if (rains["month"] > -1000) then 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

-- ------------------------------------------------------------------------
-- Mesure du détecteur de pluie historique
-- ------------------------------------------------------------------------
function getMesuresRain(duree, scale, typescale, variable)
	local now = os.time();
	getResponseData("https://api.netatmo.net/api/getmeasure","access_token="..token.."&device_id="..int_id.."&module_id="..rain_id.."&scale="..scale.."&type="..typescale.."&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()
			--getMesuresRain1heure()
      		if (rain_id ~= "") then
      			getMesuresRain(1000 * 60 * 60, "max", "Rain", "hour")
      			getMesuresRain(1000 * 60 * 60 * 24, "1hour", "sum_rain", "day")
      			getMesuresRain(1000 * 60 * 60 * 24 * 7, "1day", "sum_rain", "week")
      			getMesuresRain(1000 * 60 * 60 * 24 * 30, "1day", "sum_rain", "month")
        	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)

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

×
×
  • Créer...