Ajout via scénario d'un 'specific_day'

Hello,

si ca peut aider, j’ai ajouté une commande Ajouter une date spéciale dans la prochaine version :slight_smile:
qui prend en param une ou N dates, format AAAA-MM-JJ séparées par une virgule

:wink:

1 « J'aime »

Super, cela permettra pour certains 'specific_day' d’éviter le bloc code.

Mention spéciale pour toi, pour la prise en compte sur d’autres sujets de vieilles demandes d’autres utilisateurs. :+1:

1 « J'aime »

tomitomas aime bien voir des « résolus » sur l’ensemble de ses plugins, et il a bien raison ! Déformation professionnel surment, il doit avoir un chef casse pied :wink:

1 « J'aime »

C est surtout + pratique pour savoir ce qui te reste a faire !!

Et ici l idee est bonne et c est quand meme + simple d avoir une commande qui fait tout, plutot qu un bloc code que les utilisateurs copieront mal, ne comprendront pas, etc…!

L objectif c est justement bien de progresser ensemble ! :wink:

C est moi le chef casse pied qui enquiquine tout le monde …!
Du coup j essaie d appliquer a moi meme ce que je demande a mes equipes ! :wink:

En 100% sans bloc code, je n’y arrive pas.

dateBin, 1 february 2023
N, 3
tag_01, strtotime(tag(dateBin))
tag_02, intdiv(strtotime("now")-strtotime(tag(dateBin)),86400*tag(N))+1
tag_03, tag(tag_02)*86400*tag(N)
tag_04, tag(tag_01)+tag(tag_03)
tag_05, "date('Y-m-d',tag(tag_04))"
specific_day, str_replace('"','',"tag(tag_05)")
[2023-02-08 19:28:44][SCENARIO] -- Start : Scenario lance manuellement.
[2023-02-08 19:28:44][SCENARIO] - Exécution du sous-élément de type [action] : action
[2023-02-08 19:28:44][SCENARIO] Mise à jour du tag #dateBin# => 1 february 2023
[2023-02-08 19:28:44][SCENARIO] Mise à jour du tag #N# => 3
[2023-02-08 19:28:44][SCENARIO] Mise à jour du tag #tag_01# => 1675206000
[2023-02-08 19:28:44][SCENARIO] Mise à jour du tag #tag_02# => 3
[2023-02-08 19:28:44][SCENARIO] Mise à jour du tag #tag_03# => 777600
[2023-02-08 19:28:44][SCENARIO] Mise à jour du tag #tag_04# => 1675983600
[2023-02-08 19:28:44][SCENARIO] Mise à jour du tag #tag_05# => "2023-02-10"
[2023-02-08 19:28:44][SCENARIO] Mise à jour du tag #specific_day# => 2011
[2023-02-08 19:28:44][SCENARIO] Exécution de la commande  [Aucun][Poubelle Test][Ajouter une date spéciale] avec comme option(s) : {"background":"0","title":"","message":"2011"}

EDIT - Une solution serait que la commande action accepte les dates cotées.

dans mon précédent msg, je ne pensais pas forcément à supprimer tout le bloc code, mais peut etre juste le simplifier qu’il fasse un peu moins peur à des moins expérimentés :slight_smile:

// Une semaine sur N, X fois
$maPoubelleID = '1624'; // l'identifiant de l'équipement My Bin
$dernierRamassage = '2023-01-11';
$cycleRamassage = 3; // N
$nombreRamassage = 6; // X prochaines fois

// ------------------------------------

$dateEncombrants = array();
for ($i = 0; $i < $nombreRamassage; $i++) {
  $timestamp = strtotime($dernierRamassage) + (intdiv(strtotime("now") - strtotime($dernierRamassage), 7 * 86400 * $cycleRamassage ) + 1) * 7 * 86400 * $cycleRamassage  * ($i+1);
  $dateEncombrants[] =  date('Y-m-d', $timestamp);
}

$scenario->setLog('All next dates : ' . json_encode($dateEncombrants));

$cmdAdd = cmd::byEqLogicIdAndLogicalId($maPoubelleID, 'addSpecificDay');
if (!is_object($cmdAdd)) {
  $scenario->setLog('La fonctionnalité n\'existe pas');
  return;
}
$cmdAdd->execCmd(array('message' => implode(',', $dateEncombrants)));

(pas certain de la formule, que je n’ai pas épluchée en détail, puisque j’ai des dates en double, mais tu as compris l’idée :slight_smile: )

Hello @Jeandhom

est ce que tu aurais eu le temps de jeter un oeil sur cette derniere proposition ?

Je n’avais pas compris que tu voulais une relecture.

// Une semaine sur N, X fois
$maPoubelleID = '1397'; // l'identifiant de l'équipement My Bin
$dernierRamassage = '2023-03-22 noon';
$cycleRamassage = 3; // N
$nombreRamassage = 6; // X prochaines fois

// ------------------------------------

$dateEncombrants = array();
for ($i = 0; $i < $nombreRamassage; $i++) {
  $timestamp = strtotime($dernierRamassage) + (intdiv(strtotime("now") - strtotime($dernierRamassage), 7 * 86400 * $cycleRamassage ) + 1) * 7 * 86400 * $cycleRamassage  + ($i * 7 * 86400 * $cycleRamassage);
  $dateEncombrants[] =  date('Y-m-d', $timestamp);
}
$scenario->setLog('All next dates : ' . json_encode($dateEncombrants));

// ------------------------------------

$cmdAdd = cmd::byEqLogicIdAndLogicalId($maPoubelleID, 'addSpecificDay');
if (!is_object($cmdAdd)) {
  $scenario->setLog('La fonctionnalité n\'existe pas');
  return;
}
$cmdAdd->execCmd(array('message' => implode(',', $dateEncombrants)));

juste sur la ligne $timestamp qui ne me semblait pas forcément ultra bonne.
à priori mon doute était raisonnable :slight_smile:
merci


ca pourrait donc être une bonne version réduite de comment réaliser l’insertion de une semaine sur N, X fois

1 « J'aime »

Oui, il y avait juste ça

Oui, cela simplifie grandement le code.

[Mode gros sabots]
Il ne reste plus qu’à l’inclure dans le plugin. :grin:
[Fin de mode gros sabots]

en mode one shot, ca suffirait ?
genre mettre 3 input au niveau de la conf de la poubelle : dernière date / cycle / nombre + 1 bouton « générer » → ca ajoute les dates en spécifique et basta

Le plus efficace serait (à mon avis) 2 inputs, la date de référence et un nombre.
Le nombre étant un nombre de jours. Cela permet de faire un jour sur deux, sur trois, etc… et avec un multiple de sept de faire une semaine sur deux, sur trois, etc…
Le plugin calculant chaque jour la prochaine date et l’ajoute au specific_day si elle n’existe pas.

Lorsque l’on calcule une date avant le changement d’heure et que cette future date est après le changement d’heure, il peut y avoir un décalage d’un jour (suivant le sens du changement d’heure) car le timestamp de la date est à minuit. Afin d’éviter ce décalage, il vaut mieux choisir la date de référence à midi.

bon j’ai mis un peu bcp de temps désolé …
… mais ca y est : c’est dispo en beta :slight_smile:

edit : je te laisse le soin de tester et me dire si c’est OK :wink:

1 « J'aime »

Je te tiens au courant après le retour de vacances.

1 « J'aime »

je vais quand meme pas être exigent pour attendre un retour immédiat, alors que j’ai mis 4 mois à faire le truc :slight_smile:
bonne vac !

1 « J'aime »

Béta en service.
Dans mon scénario myBin, désactivation du bloc code gérant mon équipement "une semaine sur trois".
Les specific_day générés sont ok.
Je laisse tourner pour voir les renouvellement de dates.

Merci
A suivre …

top !

FYI : chaque jour je génère les 5 prochaines dates que j’ajoute dans les « dates spécifiques » (qui elles s’auto-nettoient)

1 « J'aime »

Lors de la sauvegarde de l’équipement le 24 juillet, il y avait bien les 5 dates.
La première date étant le 26 juillet qui a bien été supprimée le 27 juillet.
Mais à ce jour, aucune nouvelle date n’a été ajouté.

Jeedom 4.3.17

Tu peux me montrer ce qu il y a dans le moteur de taches lié au plugin stp ?