Bonjour
je souhaite exécuter un scénario arrosage un jour sur 2. Je ne trouve pas comment faire.
Merci d’avance pour vos retours…
Salut,
Tu peux le faire tourner tous les jours à l’heure que tu souhaites et utiliser une variable en condition d’exécution.
SI variable(arrosage_done) == 0 alors
Action pour arroser
Action variable arrosage_done=1
SINON
Action variable arrosage_done=0
Bonjour,
Via un cron « simplement », par exemple à 4h05 un jour sur deux: 5 4 * * */2
Crontab.guru - The cron schedule expression editor__*/2
Bonjour,
J’ai voulu faire la même chose que @tontondavid69 et j’ai fait la même chose que ce que tu proposes mais ça n’a pas fonctionné pour moi…
J’ai fait 2 scénarios test avec /2 et /3 et ça fonctionne bien au début mais au bout de 7j, il fait le lendemain et ensuite il repart tous les 2 ou 3j.
En fait le modulo x jours fonctionne mais il est réinitialisé par le modulo semaine (7j)…
Désolé suis sur tel, j’ai pas les logs pour vous montrer.
Du coup je suis passé avec #sjour# et je teste 3j par semaine et mon jardin et potager ont l’air d’être contents
Oui c’est normal, c’est un jour semaine sur deux
pour avoir un vrai 1 jour sur 2, je vois 2 possibilités de faire.
perso je préfère la 1, car je peux réutiliser la fonction ailleurs (mais ça s’adresse peut etre plus à un profil qui sait un peu développer …)
je mets les 2 solutions, à vous de choisir
Proposition 1 : en utilisant une fonction mise dans la class « custom user »
perso je passerai par une petite fonction rapide pour calculer le nombre de jour depuis le début de l’année
donc, avec JeeXplorer, je modifie le fichier data/php/user.function.class.php
et j’ajoute à l’intérieur de class userFunction { .....ici .... }
:
public static function nbDay($date1, $date2) {
// On récupère la différence de timestamp entre les 2 dates passées en paramétres
$nbDaysTimestamp = strtotime($date2) - strtotime($date1);
// ** Pour convertir le timestamp (exprimé en secondes) en jours **
// On sait que 1 heure = 60 secondes * 60 minutes et que 1 jour = 24 heures donc :
$nbDays = ceil($nbDaysTimestamp / 86400); // 86 400 = 60*60*24
return $nbDays ;
}
public static function nbDaysToToday(){
$firstJanuary = date("Y") . "-01-01"; // 1er janvier de l'année courante OU alors remplacer par "1970-01-01"
$today = date("Y-m-d"); // date du jour
return self::nbDay($firstJanuary, $today);
}
je sauvegarde
puis dans mon scénario j’appelle la fonction que je viens de créer nbDaysToToday
, sur laquelle on fait un modulo 2
pour savoir si le nombre de jours depuis le début de l’année est un nombre pair ou impair
Proposition 2 : avec un bloc code
ne pas utiliser de fonction dans la class « custom user », mais simplement localement dans le scénario qui en a besoin :
dans votre scénario, ajouter un bloc code :
$firstJanuary = date("Y") . "-01-01"; // defini la date
$today = date("Y-m-d");
$nbDaysTimestamp = strtotime($today) - strtotime($firstJanuary);
$nbDays = ceil($nbDaysTimestamp / 86400); // 86 400 = 60*60*24
$tags = $scenario->getTags();
$tags['#nbJour#'] = $nbDays;
$scenario->setTags($tags);
dans les 2 cas, peut etre qu’il serait plus judicieux de mettre 1970 comme année de référence, pour avoir un vrai « 1 jour sur 2 » d’une année sur l’autre
(et donc le scénario est à lancer tous les jours)
Je veux pas dire mais le truc que j’ai proposé avec une simple variable tourne vraiment une fois sur 2 et sans partir dans un script compliqué
ba le dis pas !
c’est vrai aussi !
Hello,
Tu peux aussi exécuter ton scénario tous les jours et tester s’il a été lancé depuis au moins 40h avec la fonction lastScenarioExecution(scenario)
Ou par rapport au dernier lancement de l’arrosage avec la fonction
stateDuration(commande)
Cf: https://doc.jeedom.com/fr_FR/core/3.3/scenario
Bad
Si il est exécuté tous les jours, ce sera à chaque fois 24h.
C’est correct
Ma deuxième solution reste valide
Sinon tu as un plugin gratuit programmeur, qui fonctionne chez moi, un par vanne, tu choisis les jours, heures début, le nombre de minutes …
Oui mais ça ne peut pas faire du 1 jour sur 2 puisque c’est sur 7 jours.
Bref le truc rigolo dans ce genre de sujet c’est que l’on est plein à répondre « au taquet » avec plein de solutions de fou et l’auteur du message ne s’est pas manifesté depuis son post du 12/08 13:19
et peut-être qu’on ne le reverra jamais
ps: j’ai corrigé l’heure du premier post
Oui j’ai souvenir certains posts à plus de 70 réponses avec des « grosses batailles » pour défendre son point de vue et sans aucune nouvelle du gars qui avait posé la question, amusant.
Merci pour la rectification j’ai regardé au mauvais endroit
Bonjour,
J’y vais aussi de ma petite solution :
SI date('z') % 2 == 0
ALORS
....
Mais toujours de bonnes solutions pour les autres
Effectivement, il y a plein de solutions différentes mais je trouve quand même dommage qu’il n’y ait pas quelque chose de « simple » (genre ce nous avons proposé avec @Mips) car c théoriquement le plus optimisé et le moins gourmand…
Ce n’est pas un vrai « 1 jour sur 2 ».