Exécution d'un scénario arrosage

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…:slight_smile:

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

2 « J'aime »

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 :grinning:

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 :slight_smile:

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 :slight_smile:

(et donc le scénario est à lancer tous les jours)

3 « J'aime »

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é :joy:

ba le dis pas ! :upside_down_face:

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 :rofl:
Ma deuxième solution reste valide :sunglasses:

1 « J'aime »

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 :grin:

1 « J'aime »

et peut-être qu’on ne le reverra jamais :wink:

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
 ....
3 « J'aime »

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 ».

un peu plus d’explications ?

car ca fait clairement le taff !
tu as liké ma solution plus haut, celle que propose @tomdom est identique, en beaucoup plus simple :slight_smile:

edit : en fait je pense que ta réponse n’était pas sur la proposition de @tomdom, mais plutôt sur le dernier msg de @Emlivyo !?