Action suivante selon l'état du pin GPIO

Bonjour la commu’ :grin:

Tout nouveau sur Jeedom, je commence par domotiser l’arrosage de ma terrasse.

Le principe :

J’ai 5 électrovannes commandées par des relais reliés au pin du Raspberry.
En fonction de l’humidité de mes bacs (Miflora) et de la météo, j’arrose 15, 30 ou 45 min.

J’ai créé un scénario Jeedom pour ça :

Si les conditions sont bonnes, je change la valeur du pin associé au relais avec un script, puis selon les conditions, je lance un second script pour réinitialiser l’état du pin 15, 30 ou 45 min après.

Le problème :

J’utilise pour l’instant un sleep de 45 min pour que les vannes s’ouvrent les une après les autres.
J’ai essayé de récupérer la valeur d’un pin avec un script pour conditionner l’action suivante avec un wait, mais mon script me retourne toujours 0, Quelle que soit la valeur du pin.

#!/usr/bin/env python3

import RPi.GPIO as GPIO
  
GPIO.setmode(GPIO.BCM)
   

state = GPIO.gpio_function(4)
print(state)

Le But :

Déclencher la suite d’action une fois que le relais précédent est ouvert. Soit par test du pin précédent, soit après que le script d’arrêt du pin précédent ait été exécuté.

Si vous avez des pistes je suis preneur :grinning_face_with_smiling_eyes:

En tout cas, je sens que je vais bien m’amuser avec Jeedom :grinning_face_with_smiling_eyes:

je ferai un seul script qui se relance toutes les 10 minutes par exemple et qui utilise 5 variables pour savoir s’il est en cours avec une vanne ou non. il faut éviter les pauses dans les scripts à mon avis, ça fait pas bon ménage avec jeedom de laisser des trucs comme ça tourner en arrière plan.

ton script sur l’humidité de plus doit se déclencher plein de fois si c’est la condition d’une exécution provoquée. si ça tombe < 35, 34, 33, … le temps que ça arrose :slight_smile: donc tu dois décocher multi-lancement pour être certain qu’il y a qu’un qui tourne.

personnellement je tenterai un morceau de code en php c’est bien plus facile avec un switch/case basé sur les états. les scripts deviennent vite illisibles quand on y fait plein de choses. C’est bien pour les automatisations simples, mais pour le reste il vaut mieux programmer :slight_smile:

Merci de ta réponse @neurall :grin:

Pour le déclenchement, c’est en fonction de l’heure de coucher du soleil, mais tu m’apprends l’existence de la case multi-lancement :grinning_face_with_smiling_eyes:

Pour le code PHP, il faut que je me plonge dans des tutos, je n’y connais rien pour l’instant, c’est pour ça que j’essayais de passer par un scénario. Ce que j’ai écrit plus haut est en python, mais ça devrait quand même me renvoyer la valeur du pin ? :thinking:
Je vais essayer en PHP vois si j’ai un meilleur retour.

J’avais lu qu’il fallait effectivement éviter les pauses. Mais je m’en sers comme palliatif le temps de trouver une solution plus élégante. :grinning_face_with_smiling_eyes: Je vais me pencher sur l’utilisation des variables dans ce cas. Mais j’avoue ne pas bien comprendre le déroulé de ta proposition. Tu peux détailler un peu plus ce que tu avais imaginé ? :pray:

Bonjour, n’oublie jamais le lastcom dans une condition
Le plug météo déconne ou ton sensor humidité n’a plus de pile et tu n’arroses jamais !
Regarde se script chauffage : je l’utilise en cron a la minute ça consomme rien.
Avec quelques modif perso

[2020-11-27 23:42:04][SCENARIO] 27-11-2020 23:42:04.3664750 Europe/Brussels
[2020-11-27 23:42:05][SCENARIO] sonde : [Salle a manger] température : [19.9] consigne : [19] temp_difftime : [58]
[2020-11-27 23:42:05][SCENARIO] sonde : [Cuisine] température : [19.6] consigne : [19] temp_difftime : [594]
[2020-11-27 23:42:05][SCENARIO] sonde : [Chambre Ami] température : [15.5] consigne : [12] temp_difftime : [754]
[2020-11-27 23:42:05][SCENARIO] chaudiere : 0
[2020-11-27 23:42:05][SCENARIO] 27-11-2020 23:42:05.1576520 Europe/Brussels

Par une boucle vérifié chaque sonde et sa dernière remonté d’info ; additionne l’écart et si celle ci => affecte une variable

J’y connais rien en python
Vérifie ton gpio en ssh (une ligne dans le panneau de config) et si c’est ok tu dois l’intègre en PHP (exec)
Le ssh n’a pas de Time Out qui peut occasionner plusieurs lancement donc au fur et à mesure plusieurs processus.
Exemple script PHP pour lire la valeur d’une sonde ds18b20 du fichier …

<?php
  $Sonde = $argv[1]; 
if (!defined("THERMOMETER_SENSOR_PATH")) define("THERMOMETER_SENSOR_PATH", "/sys/bus/w1/devices/28-".$Sonde."/w1_slave"); 
// Open resource file for thermometer
$thermometer = fopen(THERMOMETER_SENSOR_PATH, "r"); 
// Get the contents of the resource
$thermometerReadings = fread($thermometer, filesize(THERMOMETER_SENSOR_PATH)); 
// Close resource file for thermometer
fclose($thermometer); 
// We're only interested in the 2nd line, and the value after the t= on the 2nd line
preg_match("/t=(.+)/", preg_split("/\n/", $thermometerReadings)[1], $matches);
$temperature = $matches[1] / 1000; 
// Output the temperature
print $temperature; 
?>

Sinon l’idéal par sécurité serait un relai avec Time Out défini en dur "hardware*
Avec Shelly,sonoff,…(fabricants) ou à faire soi même wemos ou autre esp (wifi ou RJ45) voir le sujet poulailler domotique a base esp8266 comme ça si jeedom hs ton arrosage se coupe quand même et chaque lancement prolonge le Time Out.

Merci @ajja17orange pour ta réponse :grin:

Très bien vu le lastcom et le Time Out en dur ! Je n’y aurais jamais pensé avant d’avoir un problème :rofl:

Je vais me pencher sérieusement sur la rédaction d’un script en PHP du coup :grin:

Si un admin passe par là, c’est possible de laisser le topic ouvert un petit moment ? Car ça va me prendre du temps avant de revenir ici avec mon premier script PHP :grin:

1 « J'aime »