Arrosage goutte-à-goutte connecté / Raspberry Pi / RFXCOM433

Récupération et bricolages malins
Avatar de l’utilisateur
patate_violente
Site Admin
Messages : 11
Inscription : 25 mars 2019, 13:54

Arrosage goutte-à-goutte connecté / Raspberry Pi / RFXCOM433

Message par patate_violente » 31 mars 2019, 23:47

Si vous avez la chance d'avoir un petit balcon, une terrasse, ou mieux d'avoir un jardin, vous avez peut-être des plantations :D
Comme chaque année : planter et surtout arroser tous le jours par période :idea:
Incompatible avec le départ vacances, ni les économies d'eau.
Si vous n'avez pas d'arrosage automatique croyez moi il faut y passer !

La partie "tuyauterie"

L'année dernière il à fait chaud, j'étais sur le qui-vive pour arroser me potirons, qui sont des plantes pleines d'eau et fragiles sous leur feuilles faisant office de parasol. Un arrosage systématique tous les soirs est nécessaire, on arrose abondament jusqu'à saturation de la terre en eau, et globalement c'est la quasi totalité qui ne sera pas absorbé par les plantes.
Il fait même parfois tellement chaud que les plantes fragiles sont sujet à être malmenée en journée (ratatinée) attendant leur arrosage du soir. Quand la plante devient étendu c'est parfois fatal :cry:

J'ai installé en catastrophe un petit kit chinois de ce type là (à Casto vous trouverez à peu près la même chose type marque Gardena, plus cher mais sûrement plus durable)
kit_chinois.jpg
De ce côté là je n'ai pas de conseil particulier si ce n'est :
- pour l'acheminement de l'eau sur de longue distance, utilser un tuyau de diamètre élevé sinon vous aurez une pression trop faible (plus c'est faible, plus vous aurez des difficultés et faire évoluer votre réseau, plus l'arrosage global sera lent)
- pour des installations devenant complexes, prévoir des vannes de régulations pour règler la pression d'eau par groupe et non par buse individuelle

C'est plutôt facile à installer, l'idée est d'assembler / découper les tuyaux avec des petits raccord en T, et de finir par des buses d'arrosage goutte à goutte :
buse.jpg
Vous connectez votre micro-réseau à votre robinet extérieur, et vous obtenez un arrosage lent très localisé sur vos plantes.


Cônes micro poreux additionnels
Vous pouvez aussi faire de petites réserve d'eau et faire un goutte à goutte permanent avec ces genre de petits arroseur goutte à goutte. J'en mets pour des plantes qui demandent beaucoup d'eau. Le débit est réglable en enfonçant plus ou moins la partie micro poreuse, et il faut aspirer l'eau une première fois pour que le tuyau n'ai plus d'air... ensuite l'arrosage est en roue libre .
goutte_agoutte_reserve.jpg
Testé et recommandé !


La solution simple pour automatiser
Gardena propose un système d’arrosage automatique pas cher, qui fonctionne sans besoin d'être sur le secteur, équipé d'un pluviomètre, par exemple le EasyControl.
Je pense que c'est tordu d'acheter un truc aussi simple :lol:
...et triste en tant que bon bricoleur de ne pas utiliser un produit raccordé à votre réseau électrique
...et d'autant plus triste de ne pas pouvoir configurer et monitorer à distance l'arrosage

D'accord, je pense que vous pouvez vous arrêter sur ce produit (ou mieux) pour la plupart :|


Connecter une électrovanne
Pour devenir pilotable à distance, votre système d'irrigation à besoin d'être sous pression du réseau d'eau. On vient mettre entre l'arrivée d'eau et le micro arrosage une électrovanne en position normalement fermée comme celle-ci (~15€).
J'ai acheté pour mon salon ces petites prises connectée pas chères de marque Chacon et vendue avec une télécommande 16 canaux / ou parfois 3 canaux (ce produit là à souvent moins de 10€ la prise). C'est un relais qui conserve son dernière état et attends une instruction On/Off et fonctionne en basse fréquence 433MHz utilisé pour la domotique.

Dans un gros boîtier étanche, ça me donne quelque chose comme ça :
electrovanne.jpg
Bien, maintenant on peut arroser en appuyant sur un bouton On / Off de la télécommande optionnelle programmable fourni par Chacon. Mais c'est pas super pratique, et il vaut mieux ne pas oublier d'appuyer sur off aussi :mrgreen:


La partie Geek - Raspberry / RFXCOM 433

Automatiser son arrosage avec son serveur domotique (Domoticz) sur Raspberry Pi
Et oui vous avez choisi de vous compliquer la vie mais vous ne le regretterez pas !

C'est onéreux sauf si vous en avez un usage étendu :
  • Raspberry Pi avec chargeur 40€
  • Antenne (polyvalente) RFXCOMM 433MHz - 110€
La base de la domotique ouverte chez soi (c'est à dire le truc qui vous permet de contrôler votre maison sans entasser un tas de box), c'est le Raspberry Pi, l'ordinateur au format carte de crédit à 30-40 €.
Le Raspberry est idéal pour faire un petit lecteur de salon (raccordé à un NAS), monter son petit serveur web, coder et faire des tests. Il ne consomme presque rien, c'est globalement les même composants que des un téléphone, mais avec une connectique USB / Wifi / Ethernet / et des GPIOs d'extension donnant court à beaucoup d'autres applications.
On pourrait croire que c'est un ordinateur pour les fins conaissers et difficile d'accès, c'est tout le contraire :
- Si vous n'y connaissez rien, téléchargez "Raspbian Stretch with desktop and recommended software", copiez le système sur une carte SD >4Go (avec le logiciel Win32 Disk Imager si vous êtes sous Windows), branchez votre Raspberry à un écran et vous aurez un Linux avec un bureau graphique installé et déjà fonctionnel ;)
- Si vous vous y connaissez un peu plus, je préfère prendre en général un système plus léger (le système Raspbian Stretch Lite est vraiment bien optimisé et stable), sans interface graphique où il sera confortable de s'y connecter en SSH (protocole d'accès à distance en ligne de commande) pour y installer des services web en l'occurence.


Domoticz
J'ai essayé Domoticz, un serveur domotique que je recommande sous Raspberry,
il s'installe en une seul ligne de commande https://www.domoticz.com/wiki/Raspberry_Pi vous y accédez ensuite sur http://ipraspberry:5555

Vous pouvez avoir un tableau de bord similaire à celui-ci, avec des interrupteurs, des scénarios et d'autres fonctionnalités moins importantes :
domoticz.png
Par exemple chez moi comme vous pouvez le voir :
  • Mon aquarium est contrôlé avec des prises connectées (lumière principe et "coucher de soleil"),
  • Mes volets sont commandables via Domoticz (et domoticz est commandable et programmable avec mon smartphone qui m'ouvre les volets le matin pour me lever plus vite... :roll: )
  • La fontaine de mon chat se lance pour 30 minutes lorsqu'il y a un mouvement de détecté, afin de prolonger la durée de vie de la pompe :lol: (au passage j'aime bien monitorer ses sorties avec un capteur d'ouverture de porte sur sa chatière)
  • et je contrôle pas mal d'autres prises connectées, dont mes switch sur les électrovannes :)
En revanche, pour contrôler mes prises / ampoules / volets connectées j'ai dû investir sur une antenne assez chère, une RFXCOM433 (plus de 100€) c'est une antenne qui va comprendre beaucoup de protocole propriétaires et ouverts en 433Mhz aussi bien en entrée qu'en sortie.
Ca fait un super boulot et c'est compatible avec énormément de matériel, on peut par exemple remplacer un pont de connection Philips Hue, contrôler des volets SOmfy, et beaucoup de matériel connu ou moins connu (les prises Chacon font parti du top aussi). Si vous utilisez une autre télécommande que dans domoticz pour contrôler un interrupteur, le RFXCOM l'aura écouté et signalé à Domoticz, l'apparage entre les deux est excellent...

Scénario d'arrosage
L'idée c'est de créer un scénario arrosage qui va appeler un script python pour l'arrosage :
domoticz_planning_arrosage.png
On appelle ce script à 11h et après le coucher du soleil.
Le fameux script ci-dessous fonctionne bien mais je ne suis pas codeur python et le script a été codé un peu sur mes besoins bizare :
  • Sil est le matin < 9h ou > >20h, on va lancer l'arrosage sur la durée défini en paramètre (N minutes, dépend de votre débit global)
  • Si on est en journée on va lancer l'arrosage avec un temps / 2 (arrosage rapide, pour les fortes chaleurs)
  • On va rechercher la météo sur une API de forecast très simple https://www.apixu.com/ on évitera d'arroser si :
    • - s'il fait "froid" (moins de 8°C)
    • - s'il y a plus de 2mm de précipitation, ou 1mm avec une humidité de 40% (voir la condition principale)
    • - si il n'y a pas de précipitation, mais plus de 55% d'humidité lorsque le temps est "normal" (entre 8 et 18°C)
Le script attends votre user / password pour interroger Domoticz,
et doit être appelé avec deux paramètres :
  • l'id de l'interrupteur de la prise (contrôlant l'électrovanne) - par exemple 99
  • le temps d'arrosage - par exemple 2 minutes

Code : Tout sélectionner

python3 watering.py 99 2

Code : Tout sélectionner

#!/usr/bin/python3
# Water plants modes:
# - "very hot" => water everytime short duration, long duration for the evening (+morning?)
# - "hot" => water a short time in midday (12-14) + long time for the evening 
# - ... other modes to define

import sys
import datetime
import time
import logging
import requests
from urllib.request import urlopen
import json

# ____________________________ logging
LOGLEVEL=logging.WARNING    # logging.WARNING / logging.DEBUG / logging.CRITICAL
FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
LOGOUT_FILENAME = '/var/log/watering_PARAM_IDX.log'

# ____________________________ domoticz
URL_ON = 'http://localhost:5555/json.htm?type=command&param=switchlight&idx=PARAM_IDX&switchcmd=On&level=0&passcode='
URL_OFF = 'http://localhost:5555/json.htm?type=command&param=switchlight&idx=PARAM_IDX&switchcmd=Off&level=0&passcode='
DOMOTICZ_USER = '__USER__'
DOMOTICZ_PASS = '__PASSWORD__'

if len(sys.argv) <= 1:
	print('Missing parameter domoticz IDX')
	sys.exit(1)
IDX = sys.argv[1]
LOGOUT_FILENAME = LOGOUT_FILENAME.replace('PARAM_IDX',str(IDX))
URL_ON = URL_ON.replace('PARAM_IDX',str(IDX))
URL_OFF = URL_OFF.replace('PARAM_IDX',str(IDX))

# Second optional param is maximum watering duration in minutes
WATER_LONG_DURATION = 5
if len(sys.argv) >= 3:
	WATER_LONG_DURATION = float(sys.argv[2])
WATER_SHORT_DURATION = WATER_LONG_DURATION / 2

logging.basicConfig(format=FORMAT,filename=LOGOUT_FILENAME,level=LOGLEVEL)
logging.getLogger("requests.packages.urllib3").setLevel(logging.DEBUG)

date_time = datetime.datetime.now()
currentHour = date_time.time().hour

def getWeather():
	try:
		response = urlopen('http://api.apixu.com/v1/forecast.json?key=___KEY___&q=Houilles')
		data = response.read().decode("utf-8")
		data = json.loads(data)
		day = data['forecast']['forecastday'][0]['day']
		return {
			'mm': day['totalprecip_mm'],
			'max': day['maxtemp_c'],
			'min': day['mintemp_c'],
			'avg': day['avgtemp_c'],
			'wind': day['maxwind_kph'],
			'humidity': day['avghumidity']
		}
	except Exception as e:
		logging.warning('API is down:: %s' % (str(e)) )
		return { 'mm': 0, 'max': 99, 'min': 99, 'avg': 99, 'wind': 0, 'humidity': 50 }

def getHotness(w):
	if w['avg'] >= 23:
		return 'veryhot'
	if w['avg'] >= 18:
		return 'hot'
	if w['min'] <= 2:
		return 'freeze'
	if w['avg'] <= 8:
		return 'cold'
	return 'normal'

w = getWeather()
h = getHotness(w)

# Override weather booleans
state = {
	'morning': currentHour <= 9,
	'evening': currentHour >= 20,
	'midday': currentHour >= 12 and currentHour <= 14
}
# Water if: 
# - not too cold
# - not too rainy
# - not a bit rainy but with humidity
# - always when 'veryhot'
# - not always but midday + evening if not 'veryhot'
water = {
	'heat': h,
	'should_water': not(
		h == 'cold'
		or h == 'freeze'
		or w['mm'] >= 2
		or w['mm'] >= 1 and w['humidity'] >= 40
		or w['mm'] >= 0.5 and w['humidity'] >= 50
		or w['humidity'] >= 55 and h == 'normal'
	)
	and (
		h == 'veryhot' 
		or (h == 'hot' and (state['midday'] or state['evening']))
		or (h == 'normal' and state['evening'])
	),
	'duration': WATER_LONG_DURATION if state['evening'] and (h == 'hot' or h == 'veryhot') else WATER_SHORT_DURATION
}

if not water['should_water']:
    logging.warning("Not necessary to water (%s) + (%s)", water, w)
    sys.exit(0)

# ON
try:
	logging.warning("Watering now for %smn, (%s) + (%s)", water['duration'], water, w)
	result = requests.get(URL_ON,auth=(DOMOTICZ_USER, DOMOTICZ_PASS))
except Exception as e:
    logging.critical('Request Failed %s - %s' % (e, URL_ON) )
    sys.exit(1)

time.sleep(water['duration'] * 60)

# OFF
try:
	logging.debug("off")
	result = requests.get(URL_OFF,auth=(DOMOTICZ_USER, DOMOTICZ_PASS))
except Exception as e:
    logging.critical('Request Failed %s - %s' % (e, URL_OFF) )
    sys.exit(1)
Domoticz log les input / output
monitor.png
Plus qu'à patienter, optimiser les dépenses en eau, et ne plus trop se soucier de tout ça :o
En bonus quelques photos de mes potirons de l'année dernière 8-)
fleur_poti.jpg
J'ai la chance d'avoir un toi technique, (et donc des bacs de terre pas spécialement profond et ne contenant pas bien l'humidité...)
poti.jpg
...avec le chat le plus truffé de capteurs au monde :lol:
potirons.jpg
à vos plantations ;)
Pièces jointes
kit_chinois.jpg

Répondre