Gestion arrosage automatique via ESP Easy

Bonjour petite présentation pour donner des idées a certain et qui me servira de rappel.
Je continue a jouer avec les ESP8266 et ESP Easy Mega.

Après ma gestion de ventilation, j’ai fait une gestion d’arrosage automatique, il en existe beaucoup mais je voulais me lancer le défit de le faire. Ok c’est pas un gros défit, mais on apprend beaucoup plus (et c’est moins cher) que d’acheter des modules tout fait.

Matériel :
esp8266 WEMOS D1 Mini Pro (choisi pour l’antenne déportée). 4€
Un régulateur de tension, j’ai choisi un LM2596S 1.56€
Alimentation 24V 20€ (surement sur capacitaire et il doit être possible de trouver moins cher)
Carte 4 relais pour piloter 4 zones 7€

Cout total environ 32€ +de quoi assembler et tester le tout.

Le câblage est très simple et donne ceci :
Si on me le demande je ferais un schéma de câblage, mème si cela est extrêmement facile.
J’alimente le régulateur en 24V, il le convertie en 5V pour l’ESP et la carte des relais.
Je branche mes relais sur des sorties de l’ESP.
Mes relais sont connecter sur D0, D1, D5, D7.

On charge ESP Easy Mega, on le connecte au wifi.
On lui donne un nom (Ici D1-Cuve), un « Unit Nuber » unique (Ici 2) et les infos pour se connecter a votre Jeedom.
Il y a plein de tuto sur le web, je passe.

Dans les devices on crée nos 4 Switch input :

1-3
Avec un nom (Ici Zone-1), la borne GPIO qui correspond (Ici GPIO 16 (D0)).
On oublie pas d’envoyer l’état au contrôleur (« Send to controller ») avec un IDX unique (ici 1) pour chaque devices.
Et le values name (Ici State-Zone-1) qui sera envoyer a jeedom.


Voila nos 4 relais configuré pour remonter leurs état dans jeedom.

On inclue tout sa via le plugin ESPEASY de Lunarok dans jeedom :
2-1

On vas retrouver le nom de l’EPS indicé de son « Unit number » et les 4 informations d’état :


Reste plus que que à faire des commandes de changement d’etat.

En vert en haut a gauche « Ajouter commande action » et on vas piloter directement le GPIO.
Ici la zone 1 qui correspond au GPIO 16.


On crée une commande ON (Ici Zone-1 ON) avec la commande gpio,16,0
On crée une commande OFF (Ici Zone-1 OFF) avec la commande gpio,16,1

Ainsi de suite pour toutes les zones.
On sauvegarde et on test.
Si vous cliquer sur tester sur ON un bruit de basculement du relais est entendue et une lumière s’allume.
Félicitation on peut piloter les relais donc les électrovannes.

C’est cool mais on vas aller plus loin.

3 « J'aime »

Pour aller plus loin : Statistique et garde fous !

Si comme moi vous voudriez commander votre arrosage avec un assistant vocal et avoir des statistiques, le passage sur un virtuel et obligatoire.
Google assistant ne fonctionne pas quand il y a trop de commande sur un équipement.

Du coup on installe le Plugin officiel « Virtuel ».

On ajoute un nouveau virtuel que l’on nome (Ici Virtuel-Arrosage-Zone-1) et pour aller plus vite on importe notre équipement qui représente notre ESP (Ici D1-Cuve_2)
Auto-actualisation (cron) toute les minutes.

On se retrouve avec une copie de notre équipement ESP (Ici D1-Cuve_2).
On peut supprimer dans le virtuel tout ce qui ne concerne pas la zone pour la quel on a crée se virtuel.
Il reste notre retour d’état et nos commande ON et OFF :

A l’aide de l’engrenage au bout de ligne de la commande on peut leur donner un type générique.
Malheureusement il n’y a pas d’arrosage, j’ai donc mis type prise:

État :

On :

Ce qui permet de « tricher » et de l’associer a un assistant vocal (Ici Google)

Maintenant des stats :
Personnellement j’utilise l’eau de la ville que je paye donc pour arroser.
J’aimerais connaitre le cout que cela représente.
Sur l’année, a la semaine, pour chaque arrosage …
Avec jeedom rien de plus simple … enfin …
Dans équipement ESP, on active l’historisation des informations :

Dans le virtuel maintenant on vas les exploiter.
On crée un nouvel information virtuel, avec nom (Ici Temp-Zone1-dernier arrosage) et pour la valeur durationBetween(« Votre équipement »,1,Last day,Now)
Ce qui vous donne le temps ou l’état de votre commande est rester sur 1 depuis hier.

*duration(commande, valeur, période) et durationbetween(commande,valeur,start,end) : Donnent la durée en minutes pendant laquelle l’équipement avait la valeur choisie sur la période (period=[month,day,hour,min] ou expression PHP) ou entre les 2 bornes demandées (sous la forme Y-m-d H:i:s ou expression PHP)

Doc Jeedom

Donc c’est le temps d’arrosage, reste à connaitre la quantité.
Facile il suffit de crée une info virtuel (plus facile a modifier par la suite) avec le débit en L/Min.
Pour exemple ici j’ai mis 100L/Minutes avec le nom Conso-Zone1-LMin

Puis crée une autre info virtuel qui multiplie le temps en minutes par le débit ( ici Conso-Zone1-dernier arrosage):

Ainsi de suite pour toutes les périodes désirées:

On peux mètre tout sa en forme de tableau pour plus de lisibilité :
Via la configuration avancé de notre équipement virtuel → Disposition

Lui donner un petit Widget et le tour est jouer :
4-5 4-6

Garde fous et sécurité :
En cas en coupure électrique , plantage de jeedom ou perte de wifi.
Il faut éviter que le jardin se transforme en piscine.

Pour cela il est possible de demander à jeedom dans les option de la commande d’état, après certain délais (Ici 30 minutes) d’automatiquement couper l’arrosage.
Avec une notification en prime.
Ici si l’etat et a ON (1) plus de 30 minutes, l’arrosage passe a OFF

Et si c’est jeedom qui plante ? ou que il n’y a plus de wifi ?
L’intérêt des ESP est d’être autonome.
On vas donc lui demander d’automatiquement couper les électrovannes après un certain délais.

Pour se faire on retourne dans l’interface de notre ESP8266 via son ip.
Dans « Tools » - > « Advanced » on active les « Rules »

On vas pouvoir crée des Rules :
Au boot de l’ESP on ferme toutes les électrovannes :

// extinction des vannes au démarage de l’ESP
On System#Boot do //When the ESP boots, do
gpio,16,1
gpio,14,1
gpio,13,1
gpio,5,1
endon

Puis des que un Switch passe 1, on demare un timer.
Des que le timer arrive a expiration on envoie la commande au GPIO pour fermer l’électrovanne :

// garde fou pour zone 1 après timer on coupe automatiquement
on Zone-1#State-Zone-1=1.00 do
timerSet,2,2100 //Set Timer 1 for the next event in 2100 seconds (35 minutes)
endon

On Rules#Timer=2 do //When Timer2 expires, do
gpio,16,1
endon

Voila en cas de problème Jeedom ferme les électrovannes après 30 minutes et l’ESP après 2100s (35 minutes).
Reste a câbler les relais pou que en cas de coupure électrique, les relais de coupe seul.
Il y a 3 emplacement sur un relais : Le commun, normalement ouvert et normalement fermer.

Salut et merci pour le partage, niveau hardware je te conseil le sonoff 4ch pro que tu peux flasher avec le soft que tu veux. Ça évite de faire des soudures et tu as un boîtier et des switch

Oui cela peut être plus propre, mais j’ai déjà commander 10 D1 mini loL
En plus je sais pas si je peux après y mettre des capteurs ou un écran tactile, si je veux faire évoluer le tout…
Je vais cacher tout dans un boitier et ça sera propre

Je n’ai pas vu le type de vannes que tu utilises.
As-tu fait le choix d’électrovannes normalement fermées ?

En effet apres c’est très limité pour ajouter des choses, il te reste une pin de libre et le port série

tu as encore d’autres risque lié au relai
1 tu ouvres et en vérité « nada »
2 tu fermes et en réalité « nada »

donc soit un sensor débit eau
ou si tu es sur des vannes un sensor sur l’alim.
ou une repet d’ordre

hormis les relais types zwave,shelly ,…« magnétique je crois » ils sont plus fiable les autres ont un pourcentage d’erreur .
j’ai des relais comme ça x1 x2 x4 x8 et même 1 de marque finder
c’est genre 1 erreur sur 1000 mais maintenant tu sais.

Bonjour fx95
Aurais tu une idée ? Je ne parviens pas à récupérer une seule valeur dans les calculs (stats virtuels)

Voici le log (virtuel) :

[2020-07-29 18:32:02][ERROR] : Erreur sur la fonction cron du plugin : [MySQL] Error code : 42S02 (1146). Table 'jeedom.object' doesn't exist  : SELECT `el`.`id`, `el`.`name`, `el`.`logicalId`, `el`.`generic_type`, `el`.`object_id`, `el`.`eqType_name`, `el`.`eqReal_id`, `el`.`isVisible`, `el`.`isEnable`, `el`.`configuration`, `el`.`timeout`, `el`.`category`, `el`.`display`, `el`.`order`, `el`.`comment`, `el`.`tags` 		FROM eqLogic el 		LEFT JOIN object ob ON el.object_id=ob.id 		WHERE eqType_name=:eqType_name  AND isEnable=1 ORDER BY ob.name,el.name
[2020-09-07 12:56:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 12:57:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 12:58:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 12:59:06][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:00:06][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:01:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:02:06][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:03:06][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:04:06][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:05:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:06:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:07:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:08:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:09:06][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:10:06][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:11:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:12:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null
[2020-09-07 13:13:05][ERROR] : Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null

Dans mon virtuel quand j’enregistre j’ai ceci :

500 : Internal Server Error

Et dans me notification j’ai ceci :

virtual Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null

Une idée ?

Tu ne doit pas avoir de données encore dans l’historique.
Ducoup le calcul est impossible.
Pense bien a historisé les états.

Merci, on verra bien cela demain :hugs:
Encore merci pour ce tutoriel qui tombe très bien pour ma part. Bravo

Pour en etre sur, tu peux aller dans l’historique (Analyse → historique).
Sélectionnez la commande et si tu a le message

Il n’existe encore aucun historique pour cette commande :

C’est que mon diagnostique est bon !

Bonjour à tous. Je n’ai toujours pas d’historique.

Erreur sur la fonction cron du plugin : Call to a member function getDatetime() on null

Je pense avoir un petit problème. Je vais essayer de regarder si quelqu’un à eu ce genre de problème.